三个问题
来源:9-13 手机验证码动态登录 - 2
慕盖茨8531685
2020-09-08
老师您好,本章有如下几个问题想要请教下
- 动态验证码登陆这块如果该手机号对应的用户不存在,会主动创建用户,此时的username为空,那如果再次换个手机号登陆,会因为username是唯一索引而报错,这块我能想到的改进办法就是修改数据库username字段或创建用户的时候随记生成一个用户名(类似生成验证码),不知道这块老师有什么建议没
if login_form.is_valid():
mobile = login_form.cleaned_data['mobile']
# 验证用户是否存在
exist_user = UserProfile.objects.filter(mobile=mobile)
if exist_user:
user = exist_user[0]
else:
# 如果用户不存在,注册新建
user = UserProfile(mobile=mobile)
password = generate_code(1, 6)
user.set_password(password)
username = generate_code(2,4)
user.username = username
user.mobile = mobile
user.save()
login(request, user)
return redirect(reverse('index'))
- login_form.captcha和dynamic_form为什么只能存在一个呢,在前端login.html应用已经存在了login_form.captcha,按理说即使动态验证码登陆也可以用,为什么如果验证码错误就不显示了呢,
# form表单
class DynamicLoginForm(forms.Form):
mobile = forms.CharField(required=True, max_length=11, min_length=11)
captcha = CaptchaField()
class DynamicLoginPostForm(forms.Form):
mobile = forms.CharField(required=True, max_length=11, min_length=11)
code = forms.CharField(required=True,min_length=4, max_length=4)
# view视图
class SendSmsView(View):
def post(self, request):
send_form = DynamicLoginForm(request.POST)
'''
class DynamicLoginView(View):
def post(self, request):
login_form = DynamicLoginPostForm(request.POST) #
dynamic_form = DynamicLoginForm(request.POST)
'''
# 前端login.html
<div class="form-group marb20 blur" id="jsRefreshCode">
{{ login_form.captcha }}
{{ dynamic_form.captcha }}
</div>
- 这种django的内容大多可以理解,前端login.js那块感觉有点吃力,能看懂每行代码的意思,但是整体理解的话会有欠缺
写回答
1回答
-
关于第一个问题:按照课程来设计register view的话,username是不会为空的,新建的用户的username 就是手机号,可以在xadmin 中查看新建用户username字段的值。
022020-09-09
相似问题