1. 程式人生 > 其它 >使用Django自帶的登入模組實現登入功能(包含token實現))

使用Django自帶的登入模組實現登入功能(包含token實現))

技術標籤:djangopythonvuemysqlweb

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 (使用者名稱密碼是第一步建立的使用者名稱密碼)