django authentication 登錄注冊(cè)的實(shí)現(xiàn)示例
前言
之前,寫(xiě)了django制作簡(jiǎn)易登錄系統(tǒng),這次利用django內(nèi)置的authentication功能實(shí)現(xiàn)注冊(cè)、登錄
可參考之前的文章:Django制作簡(jiǎn)易注冊(cè)登錄系統(tǒng)
一、django配置
python包具體配置見(jiàn)之前的文章,和之前一樣,注釋掉跨域,引入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
二、后端實(shí)現(xiàn)
1.新建app
python manage.py startapp app名稱
2.編寫(xiě)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)置方法驗(yàn)證 user = authenticate(username=user_name, password=pwd) print(user) # 驗(yàn)證通過(guò) if user: # 用戶已激活 if user.is_active: login(request, user) request.session["current_user"] = user.username # 將用戶名存儲(chǔ)在session中 request.session.set_expiry(0) return render(request, "index.html") # 未激活 else: return JsonResponse({ 'code': 403, 'msg': '用戶未激活' }) # 驗(yàn)證失敗 else: return JsonResponse({ 'code': 403, 'msg': '用戶認(rèn)證失敗' }) # 用戶不存在 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': '注冊(cè)成功,去登陸' }) 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'), ]
主路由(剛建完項(xiàng)目時(shí)的那個(gè)目錄下)修改如下
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('', include('app名稱.urls')), path('admin/', admin.site.urls), ]
三、前端編寫(xiě)
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é)
用戶的認(rèn)證內(nèi)容存儲(chǔ)在session中,我設(shè)置的過(guò)期時(shí)間是5分鐘。
沒(méi)有對(duì)出錯(cuò)情況進(jìn)行處理,一旦出錯(cuò)僅展示報(bào)錯(cuò)json數(shù)據(jù)。
到此這篇關(guān)于django authentication 登錄注冊(cè)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)django authentication 登錄注冊(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- django如何實(shí)現(xiàn)用戶的注冊(cè)、登錄、注銷功能
- Django 登錄注冊(cè)的實(shí)現(xiàn)示例
- Python基于Django實(shí)現(xiàn)驗(yàn)證碼登錄功能
- 利用django和mysql實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web登錄頁(yè)面
- Django通過(guò)自定義認(rèn)證后端實(shí)現(xiàn)多種登錄方式驗(yàn)證
- Django實(shí)現(xiàn)簡(jiǎn)單登錄的示例代碼
- Django實(shí)現(xiàn)前后端登錄
- Django中使用pillow實(shí)現(xiàn)登錄驗(yàn)證碼功能(帶刷新驗(yàn)證碼功能)
- 給Django Admin添加驗(yàn)證碼和多次登錄嘗試限制的實(shí)現(xiàn)
- 使用Tastypie登錄Django的問(wèn)題解決
相關(guān)文章
Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎
這篇文章主要為大家詳細(xì)介紹了Python中函數(shù)的創(chuàng)建與調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實(shí)例講解
今天小編就為大家分享一篇PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Pycharm無(wú)法打開(kāi)雙擊沒(méi)反應(yīng)的問(wèn)題及解決方案
這篇文章主要介紹了Pycharm無(wú)法打開(kāi),雙擊沒(méi)反應(yīng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08python機(jī)器學(xué)習(xí)XGBoost梯度提升決策樹(shù)的高效且可擴(kuò)展實(shí)現(xiàn)
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)XGBoost梯度提升決策樹(shù)的高效且可擴(kuò)展實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python實(shí)現(xiàn)合成多張圖片到PDF格式
在日常生活中,經(jīng)常會(huì)遇到需要提交身份證正反面證明資料的情況,而且這些網(wǎng)站大部分只接受pdf格式,這時(shí)候我們就需要把身份證正反面兩張圖片合成為一個(gè)pdf文件。本文將為大家提供用Python實(shí)現(xiàn)這一要求的方法,需要的可以參考一下2022-02-02Python中內(nèi)建函數(shù)的簡(jiǎn)單用法說(shuō)明
這篇文章主要介紹了Python中內(nèi)建函數(shù)的簡(jiǎn)單用法說(shuō)明,包括apply()、filter()、reduce()、map()四個(gè)函數(shù)的用法講解,需要的朋友可以參考下2016-05-05