当前位置:网站首页>项目登录注册思路

项目登录注册思路

2022-07-27 05:02:00 Csdn__F

redis

主要知识点

string类型的增删改查

用途:验证码存储uuid和验证码文本对应关系

增: set

删 del set设置ex 秒数

改 set

查 get

list类型的增删改查

历史记录

增: lpush rpush

删 del 清空整个列表 lrem key count rem

改 不是重点 可以使用先删除,后添加

查 lrange key 0 -1

set 类型的增删改查

收藏

增: sadd

删 del 清空整个列表 srem key value

改 不需要改,没有删掉就可以了

查 smembers key

hash 类型的增删改查

购物车

增: hset key 键 值

删 del 清空整个列表 hdel key 键

改 hset key 键 值

查 hgetall

注册

前端

校验
  1. 在input上面,要绑定事件 和 数据 v-model

    <input @blur="checkUser" v-model="username" />  如果发现input怎么也输入不进去东西,v-model里面的东西,没有在data里面定义
    
    1. @click=“函数名不加括号” 点击事件 提交注册的时候,提交登录的时候,一般在按钮上绑定
    2. @blur=“函数名” 失去焦点事件 一般是在input上面绑定。什么是失去焦点,就是光标从input里面移出来
  2. 在js的methods里面,定义一个函数,函数名就是事件里面写的函数名

    data(){
    	return {
    		"username":"",  //如果不写这个,你input输入不进去东西
    	}
    }
    ,methods:{
    	函数名(){
    		xxxx 函数体
    		// 想要获取到username 
    		var uname = this.username
    		// 发送axios请求就可以了
    	}
    }
    
验证码
<img :src="img_path" @click="ver_img" />  冒号不能少,里面给一个函数

import {
    v4 as uuid4} from 'uuid'

data:{
    
    img_path:"",
},
create(){
    
   this.ver_img() # 页面加载完成以后,马上执行一下 
},
methods:{
    
    ver_img(){
    
        uuid = uuid4() # 生成一个uuid
        this.img_path =  "/user/ver_img/" + uuid + "/"
    }
}
注册
  1. 给button按钮绑定click事件,
  2. 实现函数,发送axios请求,post请求
  3. post要带参数,post(url,参数)
  4. 参数是一个字典格式 { “username”:this.username,“pwd”:this.password }

后端

校验
  1. 获取前台传过来的数据 get/post

    1. 一般上课的时候,我们用的get+动态路由,参数通过路由的方式传过来的
    2. get 传参,参数直接在url上面,request.query_params.get(),
    3. post传参,在request.data.get()里面
    4. 路由传参,接受的时候,def get(self,request,参数) 参数名字必须和 路由里面的名字一样。
  2. 进行校验

    1. 唯一性校验

      1. 去数据库查询这条数据
      def get(self,request,uname):
      	user_info = User.objects.filter(username=uname).first()
          if user_info:
              # 返回存在
          else:  # 如果后续还有判断,就不需要写else
              # 返回可用
      
    2. 格式校验

      1. 定义正则 rule = r’’
      2. 正则匹配
        1. 导入re包 import re
        2. 匹配 返回值 = re.findall(正则的变量,要匹配字符串的变量)
        3. 判断返回值 如果为假,说明没有匹配上
        4. 根据是否匹配上,返回对应的提示
生成验证码
  1. 获取前台传过来的UUID ,说白了就是个字符串
  2. 生成一个4位的随机数,random.randint(1000,9999)
  3. 生成的随机数,不能直接用。因为是int类型,需要转换为string类型 str()
  4. 把随机数变成图片 captcha
  5. 还得把验证码和uuid的对应关系存在redis里面
# 导包
from captcha.image import ImageCaptcha
from django.http import HttpResopnse

def get(self,request,uuid):
    # 代码不完整,只写了关键性的东西,不要直接复制
    # 实例化验证码的类
    img = ImageCaptcha()

    # 生成,调用实例化对象的一个生成方法
    img_byte = img.generate(随机字符串)  #传进来的参数,一定是字符串类型的,如果不是,你需要str转换一下

    # 存uuid和随机字符串的对应关系
    r = redis.Redis(参数省略,根据自己条件添加)
    r.set(uuid,随机字符串,ex=300)

    # 返回图片的二进制,就不能用Response
    return HttpResopnse(img_byte,content_type="image/png") # 这个函数,是django自带的的
验证码校验
  1. 获取前台传过来参数 uuid 和 code
  2. 根据uuid去redis数据库,查到对应的值 code_byte,返回值是一个byte类型,需要转换成string类型
    1. 链接redis redis.Redis(host=“127.0.0.1”,port=6379,password=“123456”)
  3. 把redis查到的,转换成string类型 code_str = code_byte.decode() # decode会飘黄,正常现象
  4. 判断数据库code_str 和用户输入的code是否一致
  5. 如果一致,验证通过,不一致,验证不通过
注册
  1. 获取前台传过来的数据 get/post
    1. request.data.get() 获取post
    2. 动态路由 获取get 定义了动态路由 那你 def get的时候,或者post 需要接收这个参数
    3. 可能遇到的错误:
      1. 前台传过来的参数名和你后端接受的参数名不一样,现象就是接受的参数打印出来以后,显示None,或者可能会报错。提示一个None上面没有xx属性,或者方法。解决:你获取完参数,马上就调试一下。
    4. 补充:错误解决:
      1. 404错误,找斜杠写了没,或者路由配置了没,或者单词打错了没
      2. 500错误, 参数获取了没,代码有没有飘红、黄。如果实在找不到就一个代码块地进行return Resopnse()
      3. 返回的逻辑错误,比如用户未登录、密码错误之类的,逻辑判断上出问题了。不一定是判断这条语句有问题,有可能是你判断的值,有没有获取到,或者说类型有问题。解决:你在if判断之前,把要判断的条件 print出来,看一眼。
  2. 对参数进行校验,讲课的时候省略了。因为在前输入的时候,就进行过一次校验。这里不代表不需要了,只是说,代码重复了,不再重写了。
    1. 最好判断一下用户名是否已经存在
  3. 写入数据库
    1. 模型.objects.create(关键词参数)
  4. 返回响应
    1. return Response() 注意导入包

登录

前端

后端

  1. 获取前台传过来的数据,用户名和密码

  2. 根据用户名,查询出来这条数据,如果这条数据压根就不存在,返回用户名或密码错误就可以了。

  3. 如果查询出来数据了,对比一下密码是否一致。 if username == user_info.password:

    1. 如果不一致,直接返回用户名或密码错误就可以了

    2. 如果一致,返回登录成功,光提示登录成功不够,还要用户的信息也一并返回

      1. 用户的基本信息,存在user里面返回,前台展示使用。 用户名、手机号。密码不能返回

      2. 用户的验证信息,你登录的凭证(付款小票)。JWT

        1. 生成很简单,就一行代码

          # pip install pyjwt
          
          import jwt
          from django.conf import settings
          
          payload = {
                      
              "user_id":user_info.id,
              "user_name":user_info.name,
          }
          token = jwt.encode(payload,settings.SECRET_KEY,al...="HS256") # 这一行代码是重点
          # payload 其实就是用户信息,里面最好加一个user_id
          # 要使用settings ,要导包 from django.conf import settings
          
          return Resopnse({
                      
              "code":"",
              "msg":"",
              "user":payload,
              "token":token,
          })
          
原网站

版权声明
本文为[Csdn__F]所创,转载请带上原文链接,感谢
https://blog.csdn.net/CADN_F/article/details/125031243