【问题标题】:Can django_neomodel be used with the built in Django authentication system?django_neomodel 可以与内置的 Django 身份验证系统一起使用吗?
【发布时间】:2019-07-10 11:25:57
【问题描述】:

我想知道最好的方法是使用 django 使用内置的身份验证系统将用户身份验证数据存储在 neo4j 数据库中。

有人有这样做的经验吗?

我想这与继承 AbstractBaseUser 和 BaseUserManager 有关系,但我这辈子都想不通。

如果有人以前实现过,将非常感谢代码 sn-p。

非常感谢

【问题讨论】:

    标签: django-models neo4j neomodel


    【解决方案1】:

    如果你想扩展 Django User 模型,首先检查这个article。它显示了扩展用户模型的不同方法。在我上次的解决方法中,我需要 Neo4j 中的所有信息,所以我调整我的模型以在我的模型中包含用户的字段(它是学生的模型)。每当有新学生注册到应用程序时,我都会在保存 (post_save) 后做出反应,它会存储密码和用户名。您可以探索 Django 信号here

    对于我拥有的模型:

    class StudentProfile(DjangoNode):
        first_name = StringProperty(max_length=30)
        last_name = StringProperty(max_length=150)
        email = EmailProperty()
        birth = DateProperty()
        username = StringProperty(max_length=150, unique=True)
        password = ''
    

    对于信号:

    @receiver(post_save, sender=StudentProfile, dispatch_uid='create_user_student')
    def create_user_student(sender, instance, created, **kwargs):
        if created:
            user = User.objects.create_user(instance.username)
            user.set_password(instance.password)
            user.save()
    
    
    @receiver(post_delete, sender=StudentProfile, dispatch_uid='delete_user_student')
    def delete_user_student(sender, instance, **kwargs):
        User.objects.filter(username=instance.username).delete()
    

    除了 StudentProfile 的主视图,我还有一个使用内置 Django 身份验证系统的视图:

    from django.contrib.auth import authenticate, login as do_login, logout as do_logout
    
    ...
    
    @api_view(["POST"])
    def login(request):
        username = request.data.get('username')
        password = request.data.get('password')
    
        user = authenticate(username=username, password=password)
    
        if user is not None:
            do_login(request, user)
            return Response({'login': 'ok'}, status=status.HTTP_200_OK)
        return Response({'login': 'Error on credentials'}, status=status.HTTP_403_FORBIDDEN)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2017-04-02
      • 1970-01-01
      相关资源
      最近更新 更多