python - django使用基于类的自定义用户登录

标签 python django authentication django-rest-framework

这是我的用户模型。

class User (models.Model):
    username = models.CharField(max_length=50)
    # token = models.CharField(max_length=50)
    email_id = models.EmailField(max_length=50)
    password = models.CharField(max_length=50)
    is_deleted = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)
    updated_at = models.DateTimeField(auto_now_add=True, blank=True)

这是我对创建用户的看法

class UserView(APIView):

    def post(self,request):
        try:
            # RequestOverwrite().overWrite(request, {'token':'string'})
            user_data = UserDetailSerializer(data=request.data)
            if not(user_data.is_valid()):
                return Response(user_data.errors)
            user_data.save()
            return Response("user created successfully",status=status.HTTP_201_CREATED)
        except Exception as err:
            print(err)
            return Response("Error while creating user")

现在我想做的是在发布用户时创建一个 token ,并且该 token 稍后用于登录。 我还想验证用户是否存在于数据库中,然后进行用户身份验证。

我应该做什么..?有什么建议

下面是我的serializers.py

class UserDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model =  User 
        fields = ('id','username','email_id','password','is_deleted','created_at','updated_at')
        extra_kwargs = {
            'password': {
                'required':True,
                'error_messages':{
                'required':"Please fill this field",
                }
            }
        }

最佳答案

首先,您似乎正在定义一个与 Django auth user 没有任何关系的自定义用户。 。这是一个非常非常糟糕的主意,并且很难让它与大多数 Django 功能一起工作。您可以查看如何customize the existing user如果你真的需要的话。

对于用户认证,使用DRF Token认证,流程是这样的:

  1. 客户端发送创建用户的请求
  2. 如果用户创建成功,它会使用用户的登录名和密码请求身份验证 token
  3. 后端验证用户的凭据并颁发 token
  4. 客户端使用 token 发出后续请求
  5. 如果 token 过期或用户注销,请重复 2-4

查看如何在 DRF 的 TokenAuthentication documentation 中执行这些操作.

您的问题不是很具体,所以我不确定您期望什么样的答案,但按照这些步骤应该可以帮助您继续。

关于python - django使用基于类的自定义用户登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707972/

相关文章:

python - Pyramid 授权被绕过

python - 将 random.random() 结果转换为列表 - Python

python - Seaborn 线图高 CPU;与 matplotlib 相比非常慢

python - 导入错误 : cannot import name 'logsumexp' when importing sklearn. model_selection

django - 在同一项目中的两个应用程序之间共享 Django 用户模型

javascript - LocalStrategy 和 ClientPasswordStrategy 之间的 Passport 区别

python - 如何将用户重定向到 'view'而不通过web2py中的smartgrid

python - 服务器错误 500 Wagtail-admin

javascript - 使用 ajax/jquery 将 stripe.js token 传递给 django

azure - 为什么 Microsoft Identity Web API 中间件拒绝对访问 token 进行身份验证?