三个问题

来源:9-13 手机验证码动态登录 - 2

慕盖茨8531685

2020-09-08

老师您好,本章有如下几个问题想要请教下

  1. 动态验证码登陆这块如果该手机号对应的用户不存在,会主动创建用户,此时的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'))
  1. 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>
  1. 这种django的内容大多可以理解,前端login.js那块感觉有点吃力,能看懂每行代码的意思,但是整体理解的话会有欠缺
写回答

1回答

Arry_y

2020-09-08

关于第一个问题:按照课程来设计register view的话,username是不会为空的,新建的用户的username 就是手机号,可以在xadmin 中查看新建用户username字段的值。

0
2
慕盖茨8531685
回复
Arry_y
好的,谢谢,这边看了源码发现是我这边的问题,忘记给username设置值了。
2020-09-09
共2条回复

Django+ xadmin 开发在线教育网站

一套通用的技术组合拳,助你解决大部分Python类网站后端问题

1911 学习 · 2149 问题

查看课程