一:路由层知识点
1.自动生成路由
只要继承了ViewSetMixin及其子类的视图类,就能自动生成路由
1.先导入模块
from rest_framework.routers import SimpleRouter, DefaultRouter
2.实例化
router = SimpleRouter()
3.注册
router.register('user', UserView, 'user')
4.加入到urlpatterns
# 方法一
utlpatterns += router.urls
# 方法二
path('', include(router.urls)),
2.action装饰器的使用
1.视图类中的方法,会用到一些其他的名字,必须要使用action装饰器做映射
2.action中的一些参数:
- methods: 请求方式,列表
- detail: pk有关,默认是False, 控制生成的路由是:/user/login还是/user/pk/login
- url_path: 控制生成的/user/后面的路径是什么,如果不写,默认就是方法名
- url_name: 别名,用于反向解析
@action(methods=['POST', ], detail=False, url_path='login')
def login(self, request):
二:登录接口的编写
views.py
class UserView(ViewSet):
authentication_classes = []
@action(methods=['POST', ], detail=False, url_path='login')
def login(self, request):
username = request.data.get('username')
password = request.data.get('password')
user = User.objects.filter(username=username, password=password).first()
if user:
token = str(uuid.uuid4()) # 生成一个随机字符串
UserToken.objects.update_or_create(defaults={
'token': token}, user=user)
return Response({
'code': 100, 'msg': '登录成功', 'token': token})
else:
return Response({
'code': 101, 'msg': '用户名或密码错误'})
urls.py
from rest_framework.routers import SimpleRouter, DefaultRouter
router = SimpleRouter()
router.register('user', views.UserView, 'user')
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router