python 暑期实训第十九天--------蜗牛商城 注册用户后端逻辑

用户注册后端逻辑

用户在页面填写了信息之后,点击注册,我们后端怎么获取信息呢?
前端的页面:
在这里插入图片描述

提交的信息是一个表单,使用POST提交,所以在后端我们可以这样获取
后端获取信息写在views.py里:使用request.POST.get()获取提交表单的信息,注意这里的参数,必须和前端表单里的参数一致

from django.views import View

class RegisterView(View):
    def post(self, request: HttpRequest):
        '''处理用户提交的注册信息'''
        # 1、提取数据
        # username
        # password
        # password2
        # mobile
        # sms_code
        # allow
        username = request.POST.get("username")
        password = request.POST.get("password")
        password2 = request.POST.get("password2")
        mobile = request.POST.get("mobile")
        sms_code = request.POST.get("sms_code")
        allow = request.POST.get("allow")

尽管前端页面可以帮助我们校验大部分的数据,但是我们为了防止黑客绕过前端,向我们服务器发起非法请求,所以我们还是要对数据进行校验

  • 判断前端的数据获取的是否完整:all()函数作用是当其中字段为空时会返回false
if not all([username, password, password2, mobile, sms_code, allow]):
     return HttpResponseForbidden("参数不完整")
  • 匹配用户名是否合法:
    读懂正则表达式:r 表示正则表达式开始:[]里内容表示一个字符满足的条件,这里是0-9的数字,或者是所有字母,或者是下划线、中划线,然后一共有5-20个这样的字符
 import re
 
 if re.match(r"[0-9a-zA-Z_-]{5,20}", username) is None:
     return HttpResponseForbidden("用户名必须是5-20 个字母、数字、下划线、中划线")
  • 匹配手机号是否规范

你可能会这样写:

import re
if re.match(r"1[3,9]\d{9}",mobile)

但是我们是这样写的:我们还要加上开头和结尾匹配,防止一大串数字恰好匹配上

 if re.match(r"^1[3-9]\d{9}$", mobile) is None:
       return HttpResponseForbidden("手机号不规范")
  • 查看用户是否勾选用户协议:
 if allow != "on":
     return HttpResponseForbidden("没勾")

其实这些前端都已经帮我们做好了,我们接着来看看后端做的事情:

检查用户名是否重复,判断手机号是否重复

查询数据库的操作

这就需要对models中定义的User表进行查询了

 if User.objects.filter(username=username).count() > 0:
      return HttpResponseForbidden("用户名重复")

同理对于手机号也是这个操作:

if User.objects.filter(mobile=mobile).count() > 0:
            return HttpResponseForbidden("手机号重复")

数据校验之后,就是保存数据了

保存注册的数据

通过下面的提示我们可以知道,保存用户信息用的方法是:
在这里插入图片描述

User.objects.create_user(username=username, password=password, mobile=mobile)

注册用户之后,我们应该从注册页面直接返回给用户一个登陆成功的主页吧,这个主页就是商城的首页吧,就不会说是注册完成之后,还要用户重新输入账号和密码,影响用户体验

保持登录状态

这里用到了django自带的用户认证模块
from django.contrib.auth import authenticate, login

auth中提供了许多实用方法:

1、authenticate()
提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。

authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

user = authenticate(username=username,password = password)

后面就依据这个user 是否为空,来定义到首页

 if user is not None:
	 # 正确,让用户保持登录状态,重定向到首页
	 login(request,user)
	 #重定向到首页
	 return redirect("/")

2、login(HttpRequest, user)
该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。
3.create_user()
auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

4.set_password(raw_password)
auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。

注意:设置完一定要调用用户对象的save方法!!!

5 check_password(raw_password)
auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。

密码正确返回True,否则返回False。

最后注册完成之后应该返回商品首页

$ cd ~/projects/WoniuMallRepo/woniu_mall/woniu_mall/apps
$ python ../../manage.py startapp contents

在这里插入图片描述
定义首页广告视图
在这里插入图片描述
配置首页广告路由:绑定命名空间
在woniumall下的urls下配置:
在这里插入图片描述
在content下配置url:
在这里插入图片描述
测试首页能否访问:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值