最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django authentication 登錄注冊的實現(xiàn)示例

 更新時間:2024年11月26日 10:47:11   作者:paul_chen21  
本文主要介紹了使用Django內(nèi)置的authentication功能實現(xiàn)用戶注冊和登錄功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

之前,寫了django制作簡易登錄系統(tǒng),這次利用django內(nèi)置的authentication功能實現(xiàn)注冊、登錄

可參考之前的文章:Django制作簡易注冊登錄系統(tǒng)

一、django配置

python包具體配置見之前的文章,和之前一樣,注釋掉跨域,引入mysql
authentication需要額外引入redis

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://ip:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "session": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://ip:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {
                "max_connections": 100
            }
        }
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = "session"
SESSION_COOKIE_AGE = 500

二、后端實現(xiàn)

1.新建app

python manage.py startapp app名稱

2.編寫view

代碼如下(示例):

# Create your views here.

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.http import JsonResponse
from django.shortcuts import redirect
from django.shortcuts import render


def login1(request):
    if request.method == 'GET':
        print("GET")
        return render(
            request,
            'login.html',
        )

    elif request.method == 'POST':
        print("POST")
        # 獲取參數(shù)
        user_name = request.POST.get('username', '')
        pwd = request.POST.get('password', '')

        # 用戶已存在
        if User.objects.filter(username=user_name):
            # 使用內(nèi)置方法驗證
            user = authenticate(username=user_name, password=pwd)
            print(user)
            # 驗證通過
            if user:
                # 用戶已激活
                if user.is_active:
                    login(request, user)
                    request.session["current_user"] = user.username  # 將用戶名存儲在session中
                    request.session.set_expiry(0)
                    return render(request, "index.html")
                # 未激活
                else:
                    return JsonResponse({
                        'code': 403,
                        'msg': '用戶未激活'
                    })

            # 驗證失敗
            else:
                return JsonResponse({
                    'code': 403,
                    'msg': '用戶認證失敗'
                })

        # 用戶不存在
        else:
            return redirect('register')
    else:
        return render(request, 'login.html')


def register(request):
    if request.method == "GET":
        return render(request, "register.html")
    elif request.method == "POST":
        username = request.POST.get('username', '')
        pwd = request.POST.get('password', '')
        if User.objects.filter(username=username):
            return JsonResponse({
                'code': 200,
                'msg': 'user exists'
            })
        else:
            user = User.objects.create_user(username=username, password=pwd)
            return JsonResponse({
                'code': 200,
                'msg': '注冊成功,去登陸'
            })
    else:
        return render(request, 'register.html')


def logout1(request):
    logout(request)
    request.session.clear()
    return redirect("index")


def index(request):
    return render(request, "index.html")

3.配置路由

在app中新建urls.py

from django.urls import path
from loginapp import views
from loginapp.views import index, login1, register, logout1
urlpatterns = [
    path('', index, name='index'),  # 定義根路徑'/'到index視圖的映射
    path('login/', login1, name='login'),
    path('logout/', logout1, name='logout'),
    path('register/', register, name='register'),
]

主路由(剛建完項目時的那個目錄下)修改如下

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include('app名稱.urls')),
    path('admin/', admin.site.urls),
]

三、前端編寫

1、index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    {% if request.session.current_user %}
        <h1>Welcome, {{ request.session.current_user }}!</h1>
        <p>You are logged in.</p>
        <a href="{% url 'logout' %}" rel="external nofollow" >Logout</a>
    {% else %}
        <h1>Welcome, Guest!</h1>
        <p>Please <a href="{% url 'login' %}" rel="external nofollow"  rel="external nofollow" >Login</a> or <a href="{% url 'register' %}" rel="external nofollow"  rel="external nofollow" >Register</a>.</p>
    {% endif %}
</body>
</html>

在這里插入圖片描述

2、register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <form method="post" action="{% url 'register' %}">
        {% csrf_token %}
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        <button type="submit">Register</button>
    </form>
    <p>Already have an account? <a href="{% url 'login' %}" rel="external nofollow"  rel="external nofollow" >Login here</a>.</p>
</body>
</html>

3、 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form method="post" action="{% url 'login' %}">
        {% csrf_token %}
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        <button type="submit">Login</button>
    </form>
    <p>Don't have an account? <a href="{% url 'register' %}" rel="external nofollow"  rel="external nofollow" >Register here</a>.</p>
</body>
</html>

在這里插入圖片描述

可以看到登陸后,歡迎<用戶名>用戶

總結(jié)

用戶的認證內(nèi)容存儲在session中,我設(shè)置的過期時間是5分鐘。
沒有對出錯情況進行處理,一旦出錯僅展示報錯json數(shù)據(jù)。

到此這篇關(guān)于django authentication 登錄注冊的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)django authentication 登錄注冊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3實現(xiàn)建造者模式的示例代碼

    Python3實現(xiàn)建造者模式的示例代碼

    這篇文章主要介紹了Python3 實現(xiàn)建造者模式的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python的setattr函數(shù)實例用法

    python的setattr函數(shù)實例用法

    在本篇文章里小編給大家整理了一篇關(guān)于python的setattr函數(shù)實例用法的相關(guān)知識點內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2020-12-12
  • Pycharm的Available Packages為空的解決方法

    Pycharm的Available Packages為空的解決方法

    這篇文章主要介紹了Pycharm的Available Packages為空的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python入門_淺談for循環(huán)、while循環(huán)

    Python入門_淺談for循環(huán)、while循環(huán)

    下面小編就為大家?guī)硪黄狿ython入門_淺談for循環(huán)、while循環(huán)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Python根據(jù)已知鄰接矩陣繪制無向圖操作示例

    Python根據(jù)已知鄰接矩陣繪制無向圖操作示例

    這篇文章主要介紹了Python根據(jù)已知鄰接矩陣繪制無向圖操作,涉及Python使用networkx、matplotlib進行數(shù)值運算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Python psutil模塊簡單使用實例

    Python psutil模塊簡單使用實例

    這篇文章主要介紹了Python psutil模塊簡單使用實例,本文直接給出使用腳本,實現(xiàn)查看cpu的信息、查看內(nèi)存信息、查看系統(tǒng)啟動時間、查看網(wǎng)卡信息等,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)多路視頻多窗口播放功能

    Python實現(xiàn)多路視頻多窗口播放功能

    這篇文章主要為大家詳細介紹了Python實現(xiàn)多路視頻多窗口播放功能的相關(guān)知識,文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • python 在右鍵菜單中加入復(fù)制目標(biāo)文件的有效存放路徑(單斜杠或者雙反斜杠)

    python 在右鍵菜單中加入復(fù)制目標(biāo)文件的有效存放路徑(單斜杠或者雙反斜杠)

    這篇文章主要介紹了python 在右鍵菜單中加入復(fù)制目標(biāo)文件的有效存放路徑(單斜杠或者雙反斜杠),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python shutil模塊實現(xiàn)文件的裁剪、壓縮與解壓縮的方法

    Python shutil模塊實現(xiàn)文件的裁剪、壓縮與解壓縮的方法

    這篇文章主要介紹了Python shutil模塊實現(xiàn)文件的裁剪、壓縮與解壓縮的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • PyTorch一小時掌握之圖像識別實戰(zhàn)篇

    PyTorch一小時掌握之圖像識別實戰(zhàn)篇

    這篇文章主要介紹了PyTorch一小時掌握之圖像識別實戰(zhàn)篇,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論

广灵县| 从化市| 阿合奇县| 梁平县| 龙州县| 宜州市| 格尔木市| 调兵山市| 桃园县| 通海县| 九寨沟县| 富平县| 呈贡县| 武鸣县| 赣州市| 葵青区| 曲周县| 周宁县| 齐齐哈尔市| 溧水县| 江永县| 广南县| 安达市| 武功县| 宁国市| 大方县| 阿拉善右旗| 四会市| 城口县| 梅州市| 佛冈县| 龙岩市| 文昌市| 凭祥市| 光泽县| 商都县| 襄汾县| 墨玉县| 叶城县| 浏阳市| 齐河县|