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使用了。

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

 

posted @ 2018-12-17 17:31  a_py  阅读(112)  评论(0编辑  收藏  举报