Django进阶-auth集成认证模块

auth认证模块是Django内置集成的一个用户认证模块。css

auth认证模块方法

方法 释义
auth.authenticate() 认证校验
auth.login(request,user) 封装认证了的user对象
auth.logout(request) 将session数据都删除,且cookie也失效

auth认证模块示例

from django.shortcuts import render,redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required

def login(request):
    if request.method == "POST":
        user = request.POST.get("username")
        pwd = request.POST.get("password")

        user = auth.authenticate(username=user, password=pwd)
        # auth认证校验,若是校验成功返回用户名,不然返回空
        
        if user:
            auth.login(request, user)
            # 封装认证了的user对象
            return redirect("index.html")
    return render(request, "login.html")

auth认证模块装饰器使用

装饰器,未登陆认证时没法访问 index 默认跳转到指定页面,在setting中 配置LOGIN_URL = "跳转的页面名称" 如:html

LOGIN_URL = "login.html"
@login_required
def index(request):
    print("登陆的用户是:",request.user.username)
    return render(request,"index.html")

auth认证模块实例

目录架构

MyDjango
    APP
        html
            css
            images
            js
            static
                index.html
                login.html
        migrations
        views
            index.py
    MyDjango
        settings.py
        urls.py
        wsgi.py
    db.sqlite3
    manage.py

配置文件

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>wellcome</title>
</head>
<body>
{% csrf_token %}
    <h1>wellcome index web !!!</h1>
    <a href="login.html">退出</a>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="post" action="login.html">
    {% csrf_token %}
    用户名:<input type="text" name = "username">
    密码:  <input type="text" name = "password">
    <input type="submit">
</form>
</body>
</html>
index.py
from django.shortcuts import render,redirect,HttpResponse
from django.contrib import auth
from django.contrib.auth.decorators import login_required

def login(request):
    auth.logout(request)
    if request.method == "POST":
        user = request.POST.get("username")
        pwd = request.POST.get("password")
        print("用户名:",user,"密码:",pwd)
        user = auth.authenticate(username=user, password=pwd)
        # auth认证校验,若是校验成功返回用户名,不然返回空

        if user:
            auth.login(request, user)
            # 封装认证了的user对象
            return redirect("/index.html")
        else:
            return HttpResponse("登陆失败,用户或密码错误!")
    return render(request, "login.html")

@login_required
def index(request):
    user = request.user.username
    print("用户",user,"登陆成功!")
    return render(request, "index.html",{"user":user})
settings.py

TEMPLATESpython

'DIRS': [os.path.join(BASE_DIR, 'APP/html/static')]
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,"APP/html/static"),)
STATIC_ROOT = 'APP/html'
LOGIN_URL = "login.html"
urls.py
from django.contrib import admin
from django.urls import path,re_path
from APP.views import index


urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^login.html$', index.login),
    re_path('^index.html$', index.index),
]

服务运行

生成数据表web

python manage.py makemigrations APP
python manage.py migrate

建立超级用户用于登陆测试sql

python manage.py createsuperuser

服务运行django

python manage.py runserver
相关文章
相关标签/搜索