第一节 登录和认证

一、创建虚拟环境

1.一个项目对应一个虚拟环境
mkvirtualenv -p /usr/bin/python3 promote

在这里插入图片描述

2.下载安装django(使用django项目做框架)
 pip install django -i https://pypi.douban.com/simple

在这里插入图片描述

3.下载安装drf
pip install djangorestframework -i https://pypi.douban.com/simple

在这里插入图片描述

4.下载安装pymysql(使用mysql数据库)
pip install pymysql -i https://pypi.douban.com/simple

在这里插入图片描述

在这里插入图片描述

二、创建数据库

1.
mysql -uroot -p
create database `promote` charset='utf8';
grant all privileges on `promote`.* to 'promoteu'@'%' identified by 'qwe123';
mysql -upromoteu -p
show databases;

在这里插入图片描述

三、创建django项目

1.创建项目
django-admin startproject promote

在这里插入图片描述

2.给pycharm创建新的项目和项目的配置

https://editor.csdn.net/md/?articleId=121496997

四、settings.py 相关配置

https://editor.csdn.net/md/?articleId=121498949

五、创建APP目录

1.新建文件用于存放各类APP,并设置为资源目录(APP目录)

在这里插入图片描述

sys.path.insert(0, BASE_DIR)
sys.path.insert(1, os.path.join(BASE_DIR, 'apps'))

在这里插入图片描述

六、

在这里插入图片描述

1.创建映射文件提交到数据库

在这里插入图片描述

2.创建超级管理员

在这里插入图片描述

3.访问后台管理系统

在这里插入图片描述
在这里插入图片描述

4.创建两个组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.创建用户,选择用户组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、完成登录接口开发

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.保存私钥,防止泄露

在这里插入图片描述
在这里插入图片描述

2.设置保密(屏蔽config)

在这里插入图片描述

在这里插入图片描述

3.下载drf认证模块
pip install djangorestframework-jwt -i https://pypi.douban.com/simple

在这里插入图片描述

4.配置令牌过期时间
# 过期时间配置
JWT_AUTH = {'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
}

在这里插入图片描述

5.jwt 自带登录接口,配置路由(放在总路由不合适,先创建APP)
6.APP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.登录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、连接数据库(pycharm连接数据量做格式化)

1.连接数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、班级管理模块

1.再创建一个APP

在这里插入图片描述

在这里插入图片描述

2. 创建模型
from django.db import models
from django.contrib.auth.models import User   # Django认证里面的User模型# Create your models here.class Classes(models.Model):name = models.CharField(max_length=30, verbose_name='班级名')slogan = models.TextField(verbose_name='口号', null=True, blank=True)create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True)is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')number = models.ManyToManyField(User)class Meta:db_table = 'classes'verbose_name = '班级'   # 后台显示的名字verbose_name_plural = verbose_namedef delete(self, using=None, keep_parents=False):self.is_delete = Trueself.save()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.写序列化器
from rest_framework.serializers import ModelSerializer
from .models import Classesclass ClassesSerializer(ModelSerializer):class Meta:model = Classes  # 指定model映射的模型类exclude = ['id', 'is_delete']

在这里插入图片描述

4.写视图
from rest_framework.viewsets import ModelViewSet
from .models import Classes
from .serializers import ClassesSerializerclass ClassesViewSet(ModelViewSet):queryset = Classes.objects.filter(is_delete=False)  # 查询集serializer_class = ClassesSerializer

在这里插入图片描述

5.配置路由
from rest_framework.routers import DefaultRouter
from .views import ClassesViewSeturlpatterns = []router = DefaultRouter()  # 创建路由器
router.register('classes', ClassesViewSet)  # 注册路由
urlpatterns += router.urls  # 拼接路由

在这里插入图片描述
在这里插入图片描述

6.访问

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.添加数据

在这里插入图片描述
在这里插入图片描述

优化1
from rest_framework.serializers import ModelSerializer
from django.contrib.auth.models import Userclass UserSerializer(ModelSerializer):class Meta:model = Userexclude = ['id', 'password']

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优化2
from rest_framework.serializers import ModelSerializer
from .models import Classes
from users.serializers import UserSerializer
from rest_framework.fields import SerializerMethodFieldclass ClassesSerializer(ModelSerializer):# number = UserSerializer(many=True)   # 序列化的嵌套# 我们的班级在做序列化的时候,它会执行get_number的方法,同时将要序列化的实例对象(Classes),作为参数传递进去number = SerializerMethodField()class Meta:model = Classes  # 指定model映射的模型类exclude = ['id', 'is_delete']def get_number(self, classes):  # 得到班级查询出来的实例化模型对象,将返回的数据赋予numberserializer = UserSerializer(classes.number.all(), many=True)  # 拿到班级的所有数据data = {'teacher': [i for i in serializer.data if i['is_staff'] or 1 in i['groups']],'student': [i for i in serializer.data if 2 in i['groups']]}return data  # 返回的数据会赋值给number

在这里插入图片描述
在这里插入图片描述

优化3

在这里插入图片描述
在这里插入图片描述

优化4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

十、认证

1. 配置
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_jwt.authentication.JSONWebTokenAuthentication',  # 全局认证方式为JWT认证方式'rest_framework.authentication.SessionAuthentication','rest_framework.authentication.BasicAuthentication',),
}

在这里插入图片描述

from rest_framework.viewsets import ModelViewSet
from .models import Classes
from .serializers import ClassesSerializer
from rest_framework.permissions import IsAuthenticatedclass ClassesViewSet(ModelViewSet):# 局部权限设置permission_classes = [IsAuthenticated]  # 登录才有权限queryset = Classes.objects.filter(is_delete=False)  # 查询集serializer_class = ClassesSerializer

在这里插入图片描述
在这里插入图片描述

2.测试(postman工具)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明:这里拿另一个账户登录的令牌也是可以访问的,因此存在安全隐患,需要自制令牌权限
3.自定义权限
from django.contrib.auth.models import Group
from rest_framework.permissions import BasePermissionclass MyPermission(BasePermission):  # 自定义权限认证类def has_permission(self, request, view):  # 重写权限认证方法user = request.user# 获取有权限的分组,老师group = Group.objects.filter(name='老师').first()# 获取令牌用户所属的分组groups = user.groups.all()return user.is_superuser or group in groups

在这里插入图片描述

配置权限

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

4.优化(返回token同时返回用户名)

自定义验证成功并返回数据

1.配置
def jwt_token(token, user=None, request=None):"""自定义登录成功返回数据处理"""data = {'token': token,'username': user.username,}return data

在这里插入图片描述

 'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_token',

在这里插入图片描述


在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部