gpt4 book ai didi

python - 在 Django 中创建自定义用户模型的指南

转载 作者:行者123 更新时间:2023-12-01 05:23:05 24 4
gpt4 key购买 nike

我想使用 Facebook 登录以及可选的电子邮件/密码登录/注册为时尚科技应用程序的用户创建注册。

我陷入了如何完成这个过程的困境(博客中的太多例子告诉我相互矛盾的信息,并且 Django 文档没有非常清楚地解释我需要什么)。

所以我的问题是:

  1. 如何创建模型以显示用户能够通过自定义设计界面(由我)登录/注册,同时禁止他们登录管理员用户区域并成为 super 用户,但允许我(管理员)查看和控制 super 用户的常规 django 管理区域中的用户。

我猜我必须首先从模型/逻辑开始,所以:

这是我的 models.py ,到目前为止我已经为用户添加了字段,一旦正式登录,他们就可以从他们的个人资料中进行访问。但当然,首先他们会被要求使用他们的电子邮件、用户名和密码登录(如果选择密码/电子邮件登录或注册)。

模型.py:

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models

#custom user model fro Users

class MyUser(AbstractBaseUser):
username = models.CharField(max_length=40, db_index=True)
first_name = models.CharField(max_length=254, blank=True)
last_name = models.CharField(max_length=254, blank=True)
email = models.EmailField(max_length=254, null=False, unique=True, blank=True)
birthday = models.DateField(null=True, blank=True)
city = models.CharField(max_length=50, blank=True)
state = models.CharField(max_length=50, blank=True)


user_title = models.CharField(max_length=254, blank=True)
user_points = models.IntegerField(null=False, blank=True)
avatar = FileField()

#admin level and additional infomation
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)


USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['email', 'username']


class MyUserManager(object):
"""Creates and saves a User with the given first_name, last_name, birthday,"""
def create_user(self, email, username, first_name, last_name, birthday, city, state, use

r_title, user_points, avatar, password=None):
if not email:
raise ValueError('Users must have an email address')

user = self.model(
email=MyUserManager.normalize_email(email),
first_name=first_name,
last_name=last_name,
birthday=birthday,
city=city
state=state,
user_title=user_title,
user_points=user_points,
avatar=avatar,
)

user.set_password(password)
user.save(using=self._db)
return user

def create_superuser(self, email, first_name, last_name, birthday, city, state, user_title, user_points, avatar, password):


user = self.create_user(email,
password=password,
first_name=first_name,
last_name=last_name,
birthday=birthday,
city=city
state=state,
user_title=user_title,
user_points=user_points,
avatar=avatar,
)


user =

最佳答案

首先,乍一看,您的自定义用户模型对我来说看起来不错。

要将自定义模型与 Django 管理正确集成,您应该将 is_admin 字段替换为 Django 管理 is_staffis_superuser< 使用的两个字段。了解更多详情see the documentation here 。这将防止非工作人员(非管理员)用户访问管理员,并允许您定义 super 用户以授予完全访问权限。

编辑:找到更简单的方法,只需子类 AbstractUser 而不是 AbstractBaseUser,这很详细 here 。这是您的代码,已修改并清除了任何冗余字段(已在父类中实现)

class MyUser(AbstractUser):
birthday = models.DateField(null=True, blank=True)
city = models.CharField(max_length=50, blank=True)
state = models.CharField(max_length=50, blank=True)

user_title = models.CharField(max_length=254, blank=True)
user_points = models.IntegerField(null=False, blank=True)
avatar = models.FileField()

现在,要完成该过程,您只需编写页面的 url 和 View ,并使用 @login_required装饰器在适当的情况下,以防止 "anonymous" users访问这些页面。

实现 @login_required 装饰器的示例 View :

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required
def user_profile(request):
# render your template with the RequestContext
return render('profile.html')

关于python - 在 Django 中创建自定义用户模型的指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21951998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com