author认证模块

author认证模块

用auth模块 你就用全套 不是本身写一部分 用别人一部分css

​ 建立超级管理员,用于登陆DJango admin的后台管理html

​ 命令:createsuperuser,输入顺序用户名》邮箱》密码》确认密码。python

注意:全部密码必定要设为为密文jquery

登陆实例:数据库

views.pydjango

from django.shortcuts import render

# Create your views here.
from django.contrib import auth
from django.contrib.auth.models import  User

def login(request):
  if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    user_obj = auth.authenticate(username=username,password=password)      
    if user_obj:
      print(user_obj)
      print(user_obj.username)
      print(user_obj.password)
      auth.login(request,user_obj) # 执行完这一句只要可以拿到request的地方均可以经过request.user获取当前登陆用户对象
      """该方法会主动帮你操做session表 而且只要执行了该方法
         你就能够在任何位置经过request.user获取到当前登陆的用户对象
      """
      return render(request,'login.html')

login.htmlbootstrap

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    <p>username:<input type="text" name="username"></p>
    <p>password:<input type="text" name="password"></p>
    <input type="submit">
</form>
</body>
</html>

该方法会有一个返回值 当条件存在的状况下 返回就是数据对象自己条件不知足 直接返回None缓存

,返回密码为密文session

pbkdf2_sha256$36000$BcE7QVE95n4A$55xwX93B60dEIqKJcXd24+VoEVY4d0CtaTPkwmSDMhc=。app

变化:

验证auth.login(request,user_obj)

为了方便,节省代码量。咱们须要使用全局配置,在settings:

# auth校验用户是否登陆 全局配置跳转url
LOGIN_URL = '/login/'

效果能够删除django_session中的数据,从新登陆

修改密码:

views.py

# 继承上边代码
from django.contrib.auth.decorators import login_required
@login_required
def set_password(request):
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        # 校验原密码对不对
        is_right = request.user.check_password(old_password)
        print(is_right)
        if is_right:
            # 修改密码
            request.user.set_password(new_password)  # 仅仅只会在内存中产生一个缓存 并不会直接修改数据库
            request.user.save()  # 必定要点save方法保存 才能真正的操做数据库
            return redirect('/login/')
    return render(request,'set_password.html',locals())

set_password.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    <p>username<input type="text" disabled value="{{ request.user.username }}"></p>
    <p><input type="text" name="old_password"></p>
    <p><input type="text" name="new_password"></p>
    <input type="submit">
</form>
</body>
</html>

注册功能演示:

views.py

def register(request):
  if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    # models.User.objects.create(username=username,password=password)
    # User.objects.create(username=username,password=password)  # 不用使用create 密码会直接存成明文
    # User.objects.create_user(username=username,password=password)  # 建立普通用户
    User.objects.create_superuser(username=username,password=password,email='123@qq.com')  # 建立超级用户  邮箱字段必须填写
    #
    return render(request,'register.html')

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    <p>username:<input type="text" name="username"></p>
    <p>password:<input type="text" name="password"></p>
    <input type="submit">
</form>
</body>
</html>

扩展auth_user字段

  1. 利用一对一表关系,扩展字段

  2. 本身写一个默写类,继承原来的auth_user类,而后在settings配置文中告诉Django使用新建的类代替原来的auth_user 表,由于已经建立完模型库,因此只能换库或者换项目。

    这里更换成MySQL数据库

    建表:

    models.py

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    # Create your models here.
    
    class Userinfo(AbstractUser):
        """
        强调 你继承了AbstractUser以后 你自定义的表中 字段不能跟原有的冲突
        """
        phone = models.BigIntegerField()
        avatar = models.FileField()
        register_time = models.DateField(auto_now_add=True)

    必定要在settings 中指定

    # auth自定义表配置
    AUTH_USER_MODEL = 'app01.Userinfo'
    
    # 固定语法: AUTH_USER_MODEL = '应用名.表名'

经过上边的方式继承的表,仍是能够继续使用auth模块全部的功能

基于中间件 参考源码 设计本身的功能可插拔式设计

总结:相似于Django中的settings文件,舍弃大量的局部配置文件,该用全局配置文件。

相关文章
相关标签/搜索