路由,登录接口编写,认证
1.路由
1.1自动生成路由
自动生成路由的写法
首先我们导入模块 from from rest_framework.routers import SimpleRouter
然后实例化对象
router = SimpleRouter()
然后注册路由
router.register('user',views.userview,'user')
最后添加到路由
-urlpatterns+=router.urls
-path('', include(router.urls))
以上两种方式都可以
# 在视图函数中,会有一些其它名字的方法,必须要使用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 class User(models.Model): name = models.CharField(max_length=32) password = models.CharField(max_length=32) def __str__(self): return self.name class TypeUser(models.Model): user = models.OneToOneField(to='User',on_delete=models.CASCADE) token = models.CharField(max_length=32,null=True)
views class UserView(ViewSet): @action(methods=['POST', ], detail=False, url_path='login') def login(self, request): username = request.data.get('name') password = request.data.get('password') user = User.objects.filter(name=username, password=password).first() if user : token = str(uuid.uuid4()) TypeUser.objects.update_or_create(defaults={'token': token}, user=user) return Response({'code': 100, 'msg': '登录成功', 'token': token}) else: return Response({'code': 101, 'msg': '登录失败'})
urls router = SimpleRouter() router.register('user', views.UserView, 'user') urlpatterns = [ path('admin/', admin.site.urls), path('', include(router.urls)), ]
3.认证
认证就是写一个逻辑判断是否登录,首先我们从request中拿到token的值,接着我们从TypeUser表中找这个token值是否能找到,如果找到了返回用户名和token值,如果没找到返回没有登录。
class LoginAuth(BaseAuthentication): def authenticate(self, request): token = request.GET.get('token') user_token = TypeUser.objects.filter(token=token).first() if user_token: return user_token.user, token else: raise AuthenticationFailed('您没有登录')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现