• Django的用户认证


    Django中用户登陆的实例:

    逻辑流程

    • 1、客户端发起请求,根据url规则会首先转至index函数,
    • 2、在index函数上添加一个装饰器('@login_required',django自带)。加入该装饰器后,请求index函数时,django会跳转至 'accounts/login/' 。
    • 3、在urls.py中设置将对 'accounts/login/'  的请求交给user_login函数处理。
    • 4、user_login函数里定义验证条件,验证通过,返回首页。验证失败,返回登陆页面,并提示错误。
    • 5、点击退出按钮,跳转至登陆页面

    index.html

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>Students CRM</h1>
        {% block page-content %}
        Welcome to The Students CRM
        {% endblock %}
        <div>
            {% if request.user.is_authenticated %}    #如果登陆成功
                <span>{{ request.user }}</span>       #显示登陆名
            {% else %}
                <span>登陆/注册</span>
            {% endif %}
        </div>
        <div>
            <a href="accounts/logout">退出</a>
        </div>
    </body>
    </html>

    login.html

    {% extends 'index.html' %}
    
    {% block page-content %}
        <form action="" method="post"> {% csrf_token %}
            <div>
                <input type="text" name="username">
            </div>
            <div>
                <input type="password" name="password">
            </div>
            <div>
                <input type="submit" value="login">
            </div>
        </form>
        <div>
            {% if login_error %}
                <p style="color: red">{{ login_error }}</p>
            {% endif %}
        </div>
    {% endblock %}

    views.py

    #!_*_ coding:utf-8 _*_
    from django.shortcuts import render,HttpResponseRedirect
    from django.shortcuts import HttpResponse
    # Create your views here.
    
    #调用django装饰器
    from django.contrib.auth.decorators import login_required
    
    from django.contrib.auth import authenticate,login,logout
    
    @login_required       #装饰器,
    def index(request):
        return render(request,'index.html')
    
    def user_login(request):   #判断用户登陆
        if request.method=='POST':
            user = authenticate(username=request.POST.get('username'),password=request.POST.get('password'))
            if user is not None:   #user不为空,表示登陆成功
                login(request,user)
                return HttpResponseRedirect('/')  #登陆成功,跳转到首页
            else:
                login_error='wrong username or password'
                return render(request,'login.html',{'login_error':login_error})    #登陆失败,返回错误信息
        return  render(request,'login.html')
    
    def user_logout(request):   #退出登陆
        logout(request)
        return HttpResponseRedirect('/')

    urls.py

    from django.conf.urls import url
    from django.contrib import admin
    
    from stu_crm import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^$',views.index),
        url(r'^accounts/login/',views.user_login),
        url(r'^accounts/logout/',views.user_logout),
    ]
  • 相关阅读:
    两个List集合过滤出不同集合
    TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.
    sql server 查询某个表被哪些存储过程调用
    SQL server字符分割
    oracle 结果集合并
    tree与GridView交互
    oracle job相关
    ImportFileHandler 附件上传
    dt转换List CovertListHelper
    node版本管理mac版
  • 原文地址:https://www.cnblogs.com/ahaii/p/5733939.html
Copyright © 2020-2023  润新知