zoukankan      html  css  js  c++  java
  • Django用户认证

    一、Cookie保存登陆状态

    Cookie说明

    Cookie是一段小信息(数据格式一般是类似key-value的键值对),由服务器生成,并发送给浏览器让浏览器保存(保存时间由服务端定夺)。当浏览器下次访问该服务端时,会将它保存的Cookie再发给服务器,从而让服务器根据Cookie知道是哪个浏览器或用户在访问它。(由于浏览器遵从的协议,它不会把该服务器的Cookie发送给另一个不用host的服务器)。

    Django中实现Cookie

    from django.shortcuts import render, redirect
    
    # 设置cookie
    """
    key: cookie的名字
    value: cookie对应的值
    max_age: cookie过期的时间
    """
    
    # 保存cookie到浏览器
    response = redirect('/index/')
    response.set_cookie(key, value, max_age)
    # 为了安全,可以调用下面的函数来给cookie加盐
    response.set_signed_cookie(key, value, salt='加密盐', max_age)
    
    # 获取cookie
    def index(request):
        request.COOKIES.get(key)
        request.get_signed_cookie(key, salt='加密盐', default=None)
        
    # 删除cookie
    response = redirect('/index/')
    response.delete_cookie(key)
    

    具体代码

    # view.py 
    
    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            """
            验证用户名密码逻辑...
            """
            # 如果密码正确
            if pwd == user_obj[0].u_pwd:
                # 设置cookie
                response = redirect('/index/')
                response.set_signed_cookie('username', username, salt='加密盐', max_age=3600*240)
                return response
            
    def index(request):
        # 获取cookie
        username = request.get_signed_cookie('username', salt='加密盐', default=None)
        """
       	主页页面展示逻辑...
        """
        # 将username传到前端判断是否为None验证用户是否已登陆
        
    def logout(request):
        # 清除cookie
        response = redirect('/index/')
        response.delete_cookie('username')
        return response
    

    二、使用DJango的auth模块

    1、models.py中创建用户表继承AbstractUser

    # models.py
    from django.contrib.auth.models import AbstractUser
    
    class MyUser(AbstractUser):
        """
        AbstractUser提供基本的用户字段
        注意:AbstractUser中的密码使用密文存储
        添加自定义字段
        """
    

    2、setting中配置

    # setting.py
    AUTH_USER_MODEL = 'appname.MyUser'
    

    3、使用auth模块进行登陆认证

    from django.contrib import auth
    
    def login(request):
        
        """
    	登陆逻辑...    
        """
        # 验证用户账号密码,登陆成功返回用户对象,失败返回None
        user = auth.authenticate(username=username, password=pwd)
        if user:
            # 将用户登陆状态记录到request中
            auth.login(reqeust, user)
    

    4、前端判断用户是否已登陆

    # home.html
         {% if request.user.is_authenticated %}
             <li><a href="#">{{ request.user.username }}</a></li>
         {% else %}
             <li><a href="/login/" style="color:black;">登陆</a></li>
         {% endif %}
    

    三、自定义auth用户认证

    未完待续....

  • 相关阅读:
    [Win32]一个调试器的实现(十)显示变量
    [Win32]一个调试器的实现(九)符号模型
    [Win32]一个调试器的实现(八)单步执行
    [Win32]一个调试器的实现(七)断点
    [Win32]一个调试器的实现(六)显示源代码
    [Win32]一个调试器的实现(五)调试符号
    [Win32]一个调试器的实现(四)读取寄存器和内存
    将博客搬至CSDN
    AndroidManifest.xml解析和五大布局介绍
    十六进制颜色
  • 原文地址:https://www.cnblogs.com/17vv/p/11574785.html
Copyright © 2011-2022 走看看