[Day19] 登入、登出API – views

昨天做了注册的API,想当然,有注册就有登入登出,不然要注册要干嘛XD
所以今天要来做的是登入、登出API的部分,这边首先还是一样,来到我们的views,要来撰写我们登入、登出的主要逻辑,先来看到我们登入的部分~~~

登入API程序码

from datetime import datetime               
import json
import uuid                                 
from django.contrib.auth.models import User
from django.http.response import JsonResponse
from django.views.decorators.csrf import csrf_protect
from user.models import UserProfile 
from django.contrib import auth     #新增
from django.contrib.sessions.models import Session#新增

@csrf_protect
def login(request):             #登入
    if request.method == "POST":
        data = json.loads(bytes.decode(request.body,"utf-8"))
        try:
            account = data['account']
            password = data['password']
            auth_obj = auth.authenticate(username=account,password=password)#验证帐号对错
            if auth_obj is not None:    #验证成功
                if request.user.is_authenticated == False:#验证是否有帐号已登入/新增开始
                    auth_obj.check_password(password) #检查输入与验证返回user对象密码是否相符
                    request.session.create()
                    auth.login(request,auth_obj)
                    message = {"status": "登入成功"}
                else:
                    message = {"status":"帐号已登入"}
            else:
                message = {"status":"帐号密码输入错误"}
        except :
            message = {"status": "登入失败"}
        return JsonResponse(message)

想法及介绍function

简单说明一下我的想法以及function的功能,我主要是先判断帐号验证是否有成功,而且是要使用者在未验证的状态下,才会登入,登入之後使用者状态才会变成已验证,但是如果帐号正确,可是使用者已验证会显示已登入。

  • auth.authenticate(username=account,password=password):主要功能是验证帐号、密码是否正确,如果正确,则会返回相对应对象的资料,如果不正确,则会返回None。
  • request.user.is_authenticated:判断帐户是否通过验证。
  • auth_obj.check_password:检查输入与验证返回user对象密码是否相符。
    提醒:「auth_obj.」要注意,因为我auth_obj=auth.authenticate 这行程序,返回使用者资料是储存到auth_obj变数里,所以如果夥伴有改写auth_obj这个变数名称的话,这里的check_password前面也要改写唷~~
  • request.session.create:创建session,如果忘记甚麽是session的夥伴,可以回到Day13、14复习一下唷~~~
  • auth.login:将一个已验证的帐户附在session上。

登出API程序码

@csrf_protect
def logout(request):        #登出
    try:
        auth.logout(request)
        message = {"status":"登出成功"}
    except:
        message = {"status":"登出失败"}
    return JsonResponse(message)

登出,就不多解释啦XD,只有一行程序就是登出~~

这里有官方文件,关於login、logout、authenticated的用法说明

今天把逻辑都写完了~~ 明天就可以开始设定登入、登出的urls啦~~~


<<:  Day 19 : 案例分享(6.2) 人事、差勤与薪资 - 组织架构、人事资料及个人合同管理

>>:  2021-Day29. Serverless(十 七):Deploy Ktor To Azure

[Day9] 记得色情守门员吗? 教你用Python做简易版守门员!

其实我根本不知道色情守门员的原理是什麽,也不想知道 (怨念很深) 这个程序没有那麽神通广大,不能自动...

panel data regression in r

废话不多说,直接附上code 影片含有程序码详细解说,若有误再烦请告知,谢谢 library(plm...

Youtube Analytics API 教学 - 基本架构 reports.query

「鲑鱼均,因为一场鲑鱼之乱被主管称为鲑鱼世代,广义来说以年龄和脸蛋分类的话这应该算是一种 KNN 的...

Flutter基础介绍与实作-Day28 旅游笔记的实作(9)

今天就继续来做剩下的两个地区吧! 一样先在assets资料夹内的View资料夹里建立南部和东部的资料...

【Day 18】jQuery DOM

何谓DOM? DOM = Document Object Model(文件物件模型) 根据MDN表示...