路由,登录接口编写,认证

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))
以上两种方式都可以

复制代码

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
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('您没有登录')

 

posted @   shangxin_bai  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示