• Django项目下auth认证的使用(二)


    基于Django的auth认证系统,你写一个项目时,当你需要判断 用户是否登录,是否有权限直接访问你的网站,还是需要登录才有权限访问,这些东西都是基于一个cookie或者session的。系统通过判断你浏览器端 是否携带认证的信息,从而给你赋予什么样的权限(现在也有一个什么缓存登录的,你们也可以去了解一下)。但是cookie或者session的话,你是不是要自己写一个cookie或者session啊。你自己写的话一大段代码不说,而且考虑的没那么全面。但是Django已经替你想到了,留了一个auth认证系统。

    这样你就省去了一大堆麻烦事了。

    这里我先写一个二的篇章,因为突然想写一个,但是又没有使用默认的auth_user表,而是自己写过一个表,所以这是一个进阶一样的东西吧!后面有时间我会写一个直接使用Django自带的auth_user表的认证使用的。、

    你不使用auth_user表的话你就要自己写一个表在models里面了:

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    # Create your models here.
    
    
    
    class UserInfo(AbstractUser):  # UserInfo 必须继承于AbstractUser.你可以去看看里面有什么字段。
        phone = models.CharField(max_length=11, null=True, unique=True)

    写了一个表后,还要告诉Django,你使用了自己的表没有使用它自己带的auth_user表。所以还要在settings里面加一行设置:

    AUTH_USER_MODEL = 'users.UserInfo' # AUTH_USER_MODEL这个是固定的写法,后面的user是指的你自己在哪个app写的models UserInfo是指你创建的表的名字。

    接下来就是要在数据库里面生成你需要的表了,

    使用

    makemigrations,再使用migrate生成你的表。

    写完这些,你就可以使用auth了。

    views中使用

    from django.shortcuts import render, HttpResponse, redirect
    from django.contrib import auth  # 导入auth认证模块
    from users.models import UserInfo # 导入你的UserInfo表
    from django.views import View
    
    
    # 登录
    class Login1(View):
        def get(self, request):
            return render(request, 'login.html')
    
        def post(self, request):
            # 获取post的email字段,这是用户名(email)和获取pwd
            name = request.POST.get('email')
            pwd = request.POST.get('pwd')
            # 使用auth匹配是否正确
            user = auth.authenticate(username=name, password=pwd)
            if user:
                # 这是把session储存到数据库中,以便下次验证是否登录
                auth.login(request, user)
                return redirect("/users/user_list/")
    
    
    # 注册
    class Reg(View):
        def get(self, request):
            return render(request, 'regster.html')
    
        def post(self, request):
            name = request.POST.get('email')
            pwd = request.POST.get('pwd')
            repwd = request.POST.get('repwd')
            # 进行判断输入的两次密码是否一致
            if pwd == repwd:
                # 使用auth 的create_user方法进行创建数据进去数据库。
                UserInfo.objects.create_user(username=name, password=pwd, email=None)
                return HttpResponse("注册成功")
            else:
                return HttpResponse("请检查你的输入!!!")
    
    
    # 一个测试页面而已
    class UsesrList(View):
        def get(self, request):
            user = request.user.username
            if not user:
    
                return render(request, 'login.html')
            return render(request, 'user_list.html')
    
    
    class Logout(View):
        def get(self, request):
            # 使用 auth的 auth.logout(request)方法删掉session。本质上就上使用request.session.flush()删除方法,只是多了一些判断而已 
            auth.logout(request)
            return redirect("/users/login1/")
    

    这是auth使用了。

    有什么不懂可以留言,因为这只是大概写了一下而已。

    从csdn搬家过来的可能没有图片,原地址https://blog.csdn.net/weixin_38091140
  • 相关阅读:
    css浏览器兼容问题集锦
    【转】H264编码原理以及I帧B帧P帧
    Makefile Shell 脚本;sed命令
    oProfile 学习
    C++ 局部变量的析构
    【转】C++ 单例模式
    C++ operator 知识点 2
    C++ operator 知识点
    218多校第九场 HDU 6424 (数学)
    2018多校第九场 HDU 6416 (DP+前缀和优化)
  • 原文地址:https://www.cnblogs.com/Apy-0816/p/11100267.html
Copyright © 2020-2023  润新知