django authentication 登錄注冊(cè)的實(shí)現(xiàn)示例
前言
之前,寫了django制作簡易登錄系統(tǒng),這次利用django內(nèi)置的authentication功能實(shí)現(xiàn)注冊(cè)、登錄
可參考之前的文章:Django制作簡易注冊(cè)登錄系統(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
二、后端實(shí)現(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)置方法驗(yàn)證
user = authenticate(username=user_name, password=pwd)
print(user)
# 驗(yàn)證通過
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),
]
三、前端編寫
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è)置的過期時(shí)間是5分鐘。
沒有對(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è)簡單的web登錄頁面
- Django通過自定義認(rèn)證后端實(shí)現(xiàn)多種登錄方式驗(yàn)證
- Django實(shí)現(xiàn)簡單登錄的示例代碼
- Django實(shí)現(xiàn)前后端登錄
- Django中使用pillow實(shí)現(xiàn)登錄驗(yàn)證碼功能(帶刷新驗(yàn)證碼功能)
- 給Django Admin添加驗(yàn)證碼和多次登錄嘗試限制的實(shí)現(xiàn)
- 使用Tastypie登錄Django的問題解決
相關(guān)文章
Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎
這篇文章主要為大家詳細(xì)介紹了Python中函數(shù)的創(chuàng)建與調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實(shí)例講解
今天小編就為大家分享一篇PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Pycharm無法打開雙擊沒反應(yīng)的問題及解決方案
這篇文章主要介紹了Pycharm無法打開,雙擊沒反應(yīng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
python機(jī)器學(xué)習(xí)XGBoost梯度提升決策樹的高效且可擴(kuò)展實(shí)現(xiàn)
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)XGBoost梯度提升決策樹的高效且可擴(kuò)展實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python實(shí)現(xiàn)合成多張圖片到PDF格式
在日常生活中,經(jīng)常會(huì)遇到需要提交身份證正反面證明資料的情況,而且這些網(wǎng)站大部分只接受pdf格式,這時(shí)候我們就需要把身份證正反面兩張圖片合成為一個(gè)pdf文件。本文將為大家提供用Python實(shí)現(xiàn)這一要求的方法,需要的可以參考一下2022-02-02

