贴一下代码.这个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...