第72篇 Django auth模块完成用户登录认证

views

from django.shortcuts import render,redirect,HttpResponse
from django.contrib import auth
from app01.models import UserInfo
from django.contrib.auth.decorators import login_required

# Create your views here.


# 登录
def login(request):
    # 用户输入用户名,密码之后点击提交,收到POST请求
    if request.method=='POST':
        username= request.POST.get('username')
        password= request.POST.get('password')
        # 调用auth.authenticate方法 传入用户名密码去验证 拿到一个验证之后的结果
        auth_obj = auth.authenticate(username=username,password=password)
        # 如果验证通过
        if auth:          
            # 如果登录成功,把用户的id保存在session中
            auth.login(request,auth_obj)
            return redirect('/index/')
        # 如果验证不成功,继续返回登录页面,并返回前端提示信息
        else:
            return render(request,'logon.html',{'error_msg':'用户名或密码错误!!!'})
    # 用户GET请求
    return render(request,'login.html')

# 首页
@login_required
def index(request):
    return render(request,'index.html')

# 注销
def logout(request):
    # 清除用户的登录session信息 并跳转回登录页面
    auth.logout(request)
    return redirect('/login/')


# 注册
def reg(request):
    if request.method =='POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        # 假设数据有效性经过验证,去数据库中添加记录
        
        # 这里千万要小心是使用create_user在数据库汇中总添加记录
        UserInfo.objects.create_user(username=username,password=password)
        
        # 注册成功跳转到login页面
        return redirect('/login/')
    
    
    
    return render(request,'reg.html')

 models

from django.db import models
# 继承Django自带的表格创建类 是一个抽象类
from django.contrib.auth.models import AbstractUser
# Create your models here.
GENDER_CHOICES = ((1,'女'),(2,'男'),(3,'保密'))
DEFAULT_GENDER = 3
# 使用自己创建的UesrInfo表 来替代Django,auth模块自动创建的表的基础上自定义一些其他的字段,
class UserInfo(AbstractUser):
    # 扩展auth表里面没有的字段
    gender = models.PositiveSmallIntegerField(choices=GENDER_CHOICES,default=DEFAULT_GENDER)
    phone = models.CharField(max_length=11)

  setting

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'
# 静态文件夹的配置信息
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

# auth模块的配置
LOGIN_URL = '/login/'  # 项目登录页面的路由

# 使用Django自带的数据表 但是自定义增加一些其他的字段 继承使用的时候需要配置
AUTH_USER_MODEL = "app01.UserInfo"  # 中间不需要写models

  index

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>index页面!!!</title>
</head>
<body>
<h1>这是index页面!!!</h1>
<h1>欢迎:{{ request.user.username }} 登录index页面!!!</h1>
<a href="/logout/">注销</a>
</body>
</html>

  login

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>登录页面!!</title>
</head>
<body>

<form action=""method="post">
    {% csrf_token %}
    <div>
        <label for="input_username">用户名:</label>
        <input type="text" name="username" id="input_username">
    </div>

    <div>
        <label for="input_pwd">密码:</label>
        <input type="password" name="password" id="input_pwd">
    </div>
    <input type="submit" name="" id="">
    <p>{{ error_msg }}</p>

</form>


</body>
</html>

  reg

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>注册页面!!!</title>
</head>
<body>

<form action=""method="post">
    {% csrf_token %}
    <div>
        <label for="input_username">用户名:</label>
        <input type="text" name="username" id="input_username">
    </div>
    <div>
        <label for="input_pwd">密码:</label>
        <input type="password" name="password" id="input_pwd">
    </div>
    <div>
        <label for="re_input_pwd">再次输入密码:</label>
        <input type="password" name="re_password" id="re_input_pwd">
    </div>
    <input type="submit" >
</form>


</body>
</html>

  

 

猜你喜欢

转载自www.cnblogs.com/cavalier-chen/p/9971632.html