IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django登录功能实现 -> 正文阅读

[Python知识库]Django登录功能实现

本章采用的是携带jwt的方式

首先我们需要搭建好我们的目录结构,如下图所示:

utils代码:

from apps import models


def jwt_response_payload_handler(token, user=None, request=None):
    """
    自定义jwt认证成功返回数据
    token:  jwt 字符串
    user: 当前登录用户对象
    request: 当前请求对象
    """
    return {
        'token': token,
        'id': user.id,
        'username': user.username
    }


def get_user_obj_by_account(account):
    try:
        user = models.User.objects.get(username=account)

        return user
    except models.User.DoesNotExist:
        return None

?

serializer代码:

# 登录序列化器
class CustomJSONWebTokenSerializer(Serializer):

    def __init__(self, *args, **kwargs):
        """
        Dynamically add the USERNAME_FIELD to self.fields.
        """
        super(CustomJSONWebTokenSerializer, self).__init__(*args, **kwargs)

        self.fields[self.username_field] = serializers.CharField()
        self.fields['password'] = PasswordField(write_only=True)

    @property
    def username_field(self):
        return get_username_field()

    def validate(self, attrs):
        # 账号密码字典
        credentials = {
            self.username_field: attrs.get(self.username_field),  # "username": "xxx"
            'password': attrs.get('password'),  # "password":"123"
        }

        if all(credentials.values()):  # self.context['request'], 当前请求对象
            # 签发token,用账号密码得到user对象
            user = authenticate(self.context['request'], **credentials)

            if user:
                if not user.is_active:
                    msg = _('User account is disabled.')
                    raise serializers.ValidationError(msg)
                # 签发token,通过user得到payload,payload包含用户信息与包含时间
                payload = jwt_payload_handler(user)
                # 在视图类中,通过序列化对象,拿到user和token
                return {
                    # 签发token:通过payload签发出token
                    'token': jwt_encode_handler(payload),
                    'user': user
                }
            else:
                msg = _('Unable to log in with provided credentials.')
                raise serializers.ValidationError(msg)
        else:
            msg = _('Must include "{username_field}" and "password".')
            msg = msg.format(username_field=self.username_field)
            raise serializers.ValidationError(msg)

models代码:

class User(AbstractUser):

    name = models.CharField(max_length=64)
    pwd = models.CharField(max_length=64)
    wechat = models.CharField(max_length=32)
    phone = models.CharField(max_length=16)


    class Meta:
        db_table = 'qq_user'
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name

urls代码:

from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token, verify_jwt_token

from apps import views
urlpatterns = [
    path('admin/', admin.site.urls),
    # path('login/', obtain_jwt_token),
    path('login/', views.LoginView.as_view()),
    path('verify_token/', verify_jwt_token),
    path('register/', views.RegisterView.as_view()),
]

postman测试效果:

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:46:25  更:2021-08-02 10:47:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:51:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码