文章目录
1. 路由
1.1 自动生成路由
0 自动生成路由的写法
-1 导入:from rest_framework.routers import SimpleRouter, DefaultRouter
-2 实例化:router = SimpleRouter()
-3注册:router.register('user',views.UserView,'user')
-4 加入到urlpatterns中(两种方式)
-urlpatterns+=router.urls
-path('', include(router.urls)),
1 自动生成的路由映射关系其实定死了()
/books/--->get--->list
/books/--->post--->create
/books/1--->get--->retrieve
...
2 以后写的视图类不需要写action装饰器的话,视图类中必须要有
-list,destroy,retrieve,create,update方法之一
-其实是必须是 5个视图扩展类之一+GenericAPIView 9个视图子类,ModelViewSet
3 SimpleRouter和DefaultRouter
-DefaultRouter比SimpleRouter多一个根路径,显示所有注册过的路由
1.2 action装饰器的使用
在视图函数中,会有一些其它名字的方法,必须要使用action装饰器做映射
# methods:支持的请求方式,列表
# detail:默认是False 控制生成的路由是 /user/login/ 还是 /user/pk/login 是不是带pk
# url_path: 控制生成的/user/后的路径是什么,如果不写,默认以方法名命名 /user/login/,一般跟函数名同名即可
# url_name:别名,用于反向解析
@action(methods=[‘GET’,‘POST’], detail=True, url_path=‘login’)
def login(self, request,pk):
这样写了以后可以:自动生成路由
2 登录接口编写
models.py
用户表
class User(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
def __str__(self):
return self.username
用户登录记录表
如何区分用户是否登录了
class UserToken(models.Model):
# SET_NULL SET_DEFAULT CASCADE SET(函数内存地址)
user = models.OneToOneField(to='User', on_delete=models.CASCADE)
token = models.CharField(max_length=32, null=