has_object_permission和has_permission的区别
IntegerField和AutoField的关系和区别
class AutoField(AutoFieldMixin, IntegerField, metaclass=AutoFieldMeta):
def get_internal_type(self):
return "AutoField"
def rel_db_type(self, connection):
return IntegerField().db_type(connection=connection)
request的属性和方法
WSGI
HyperlinkedModelSerializer
精简与可读
视图和路由
HyperlinkedModelSerializer
自动产生一个url代替id。
对于一个模型,在数据库中,id主键是行在数据库中的唯一标识。
在网页中,URL是网页在网络世界中的唯一标识,通过在接口中展示数据,展示主键id并不能够给前端人员直接的跳转作用,但是如果把id变成URL,前端人员则可以直接使用URL达到数据库中的这行数据所在的页面(通过URL直接进行跳转)。
这里我们也要分析一下后端接口的结构和RESTful的意义。
# models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
# serializers.py
from rest_framework import serializers
from .models import Book, Author
class AuthorSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Author
fields = ['url', 'name']
class BookSerializer(serializers.HyperlinkedModelSerializer):
author = AuthorSerializer()
class Meta:
model = Book
fields = ['url', 'title', 'author']
在视图集中使用多个序列化器
虽然视图集中默认只提供一个序列化器,但是我们可以通过重写方法实现序列化器的选择。
当条件不同的时候选择不同的序列化器。
比如,你只写了一个序列化器,但是我们在List时一般都不需要太多数据,所以后端提供太多的数据就是不必要和耗费资源的,所以我们可以根据条件使用不同的序列化器,这里的条件可以是任意条件,比如请求类型。
HTTP请求
JWT
JWT的Token保存在客户端,拜托了对服务器的依赖。
在某些需要进行身份验证的业务中,用户需要把令牌一块提交(就跟提交用户名和密码一样)
JWT令牌样子
JSON Web Token Introduction - jwt.io
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjA5MjEwMjg0LCJqdGkiOiJiNzMxMTliMTZjNWM0YTExODNkOGJiZTNhZDZmZmYzMyIsInVzZXJfaWQiOjJ9.59ZavqFzjE3EoDrniu2cwgc_cq1Rv1OxpZeqRte_HLw
Session
数据结构的共性和个性方法
理解
总结权限类的共性进行合并
内置User的创建方法解析(特别是密码部分)
APIView的使用
权限图
父类子类的super调用练习
模仿复现下面的操作
def get_permissions(self):
"""
Instantiates and returns the list of permissions that this view requires.
"""
return [permission() for permission in self.permission_classes]
def get_permissions(self):
if self.request.method == 'POST':
self.permission_classes = [AllowAny]
else:
self.permission_classes = [IsAuthenticatedOrReadOnly, IsSelfOrReadOnly]
return super().get_permissions()
进程间通信(IPC,Inter Process Communication)方式
系统调用
一种配置文件书写时利用自动提示导致的错误
当我没有加单引号,直接写利用提示时,在文件的顶部自动引入了一个东西,但是没有使用,这个会导致错误。解决方法的话可以在测试文件的地方进行书写提示,然后剪切复制到指定位置。