使用Django自帶的登入模組實現登入功能(包含token實現))
阿新 • • 發佈:2020-12-16
1.建立虛擬環境,建立專案mysite,建立app user ,
建立超級管理員 python manage.py createsuperuser (建立的的使用者名稱密碼是接下拉要用的)
2.前端傳送登入請求。
//前端使用vue,axios需要自己做相關配置 //LoginForm:{ // username: "admin", // password: 123456 // }, const {data:res} = this.$axios.get("api/users/login",{ params:this.LoginForm })
3.在Django虛擬環境中:
pip installpip install djangorestframework
配置setting檔案:
( 避免因為Django版本問題報錯建議setting中首先 import os ,目前我的版本是3.1.3)
# 避免報錯先匯入os import os INSTALLED_APPS = [ # 在app中註冊一下 'rest_framework.authtoken', ] # 配置token驗證機制,可以暫時不需要 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.TokenAuthentication', ) }
4.配置url
# 在專案url中 from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('api/users/', include('users.urls')) ] # 在app url中 from django.urls import path from . import views urlpatterns = [ path("login", view = views.login), ]
5.在app中處理請求檢視函式
from django.shortcuts import render
from rest_framework.authtoken.models import Token
from django.http.response import JsonResponse
from django.contrib.auth import authenticate
# Create your views here.
# 登入功能實現
def login(request):
# 從請求中獲取使用者名稱、密碼
username = request.GET.get('username')
password = request.GET.get('password')
user = authenticate(username=username, password=password)
if user != None :
#刪除原來的token
old_token = Token.objects.filter(user=user)
old_token.delete()
#建立新的token並傳遞給前端
token = Token.objects.create(user=user)
print(token)
return JsonResponse({
"status":200,
"message":"成功登入",
"token": token.key
})
else:
return JsonResponse({
"status":201,
"message":"登入失敗,請校驗使用者名稱或者密碼",
})
6. 測試,成功完成登入並派發token (使用者名稱密碼是第一步建立的使用者名稱密碼)