首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

贴一下代码.这个forms.py定义的表格.不能接受中文用户注册,该怎么解决

2012-05-21 
贴一下代码.这个forms.py定义的表格.不能接受中文用户注册这是forms.py代码Python code# -*- coding:utf-8

贴一下代码.这个forms.py定义的表格.不能接受中文用户注册
这是forms.py代码

Python code
# -*- coding:utf-8 -*-from django import formsimport refrom django.contrib.auth.models import Userfrom django.core.exceptions import ObjectDoesNotExistclass RegistrationForm(forms.Form):    username = forms.CharField(label=u'用户名', max_length=30)    email = forms.EmailField(label=u'电子邮件')    password1 = forms.CharField(label=u'密码', widget=forms.PasswordInput())    password2 = forms.CharField(label=u'确认密码', widget=forms.PasswordInput())    def clean_username(self):        username = self.cleaned_data['username']        if not re.search(r'^\w+$', username):            raise forms.ValidationError('用户名中只能包含正常的字符')        try:            User.objects.get(username = username)        except ObjectDoesNotExist:            return username        raise froms.ValidationError('用户名存在!')    def clean_email(self):        email = self.cleaned_data['email']        try:            User.objects.get(email = email)        except ObjectDoesNotExist:            return email        raise forms.ValidationError('用户数据库中已经有该电子邮件了')    def clean_password2(self):        if 'password1' in self.cleaned_data:            password1 = self.cleaned_data['password1']            password2 = self.cleaned_data['password2']            if password1 == password2:                return password2            raise forms.ValidationError('密码不区配')class MsgPostForm(forms.Form):    title = forms.CharField(label='标题', widget=forms.TextInput(attrs={'size':30, 'max_length':30}))    content = forms.CharField(label='内容', widget=forms.Textarea(attrs={'size':10000}))



这是views.py里面的注册函数:

Python code
def register_page(request):    if request.method == 'POST':        form = RegistrationForm(request.POST)        if form.is_valid():            user = User.objects.create_user(                username = form.cleaned_data['username'],                password = form.cleaned_data['password1'],                email = form.cleaned_data['email']                )            return HttpResponseRedirect('/accounts/register/success/')        else:            return HttpResponse('error')    else:        form = RegistrationForm()        variables = RequestContext(request, {'form': form})        return render_to_response('registration/register.html', variables)



我用中文提交注册的话.总是出现:执行这句:return HttpResponse('error')


说明form = RegistrationForm(request.POST)
这个不能接受中文字符注册

我在settings.py里与模板里都设置了utf-8了

是不是forms.py的问题?


[解决办法]
没用过django,不过看起来form.is_valid要调用你的三个clean_*函数,而这三个函数之一抛出了异常。

所以现在要确定是那个函数的问题,可以通过添加一些print,或用debugger追踪来确定。
[解决办法]
if not re.search(r'^\w+$', username):
这个没办法匹配中文吧,试试加入标志re.U...

热点排行