标签: django-custom-user

使用Django auth UserAdmin作为自定义用户模型

来自Django.Contrib.Auth文档:

扩展Django的默认用户 如果您对Django的用户模型完全满意并且只想添加一些其他配置文件信息,您可以简单地子类化django.contrib.auth.models.AbstractUser并添加自定义配置文件字段.此类提供默认用户的完整实现作为抽象模型.

说完了.我创建了一个如下所示的新模型:

class MyUser(AbstractUser):
  some_extra_data = models.CharField(max_length=100, blank=True)
Run Code Online (Sandbox Code Playgroud)

这显示在管理员中几乎像Django的标准User.但是,admin中最重要的区别是密码 - (重新)设置字段不存在,而是显示正常的CharField.我是否真的必须覆盖admin-config中的内容才能使其正常工作?如果是这样,我怎么能以某种干燥的方式做到这一点(即没有从Django源中复制东西......等等......)?

django django-models django-admin django-authentication django-custom-user

73
推荐指数
4
解决办法
5万
查看次数

类型错误:create_superuser() 缺少 1 个必需的位置参数:'profile_picture'

添加profile_picture字段后出现以下错误:

TypeError: create_superuser() missing 1 required positional argument: 'profile_picture'
Run Code Online (Sandbox Code Playgroud)

此 profile_picture 字段是设置为“Null = True”的“ImageField”。

我曾尝试以下:def create_user(...., profile_picture=None, ....)。它没有用。

并且当我创建从那里超级用户只发生在命令提示的误差。

这是我的models.py

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


class UserManager(BaseUserManager):
    def create_user(self, email, full_name, profile_picture=None, gender=None, password=None, is_admin=False, is_staff=False, is_active=True):
        if not email:
            raise ValueError("User must have an email")
        if not password:
            raise ValueError("User must have a password")
        if not full_name:
            raise ValueError("User must have a full name")

        user = self.model(
            email=self.normalize_email(email)
        )
        user.full_name …
Run Code Online (Sandbox Code Playgroud)

python django typeerror django-custom-manager django-custom-user

8
推荐指数
2
解决办法
2万
查看次数

经理不在;“auth.User”已替换为“members.CustomUser”

当我想要出现注册错误时Manager isn't available; 'auth.User' has been swapped for 'members.CustomUser',我的代码有问题,我尝试解决其他问题,例如经理不可用;'auth.User' 已被替换为 'members.CustomUser' 但他们都要求替换User = User = get_user_model(),但我没有User在我的代码中使用任何内容,或者我不知道我在哪里使用了 that.im new 在 django 、 python 、 js 等中,所以如果我的问题很愚蠢请原谅我。

有关更多信息:1)我使用Django 注册教程来创建注册方法。首先,它运行良好,但在我扩展我的作业项目后,我收到错误。2)在其他应用程序(“产品”和“搜索”)中,没有我不导入用户的地方,甚至我也不使用 CustomUser ,因为不需要与用户一起工作在此应用程序中。memebers只需使用 User 和 CustomUser。

模型.py:

from django.contrib.auth.models import AbstractUser



class CustomUser(AbstractUser):

    def __str__(self):
        return self.email

    class Meta:
        verbose_name = "member"
        verbose_name_plural = "members"
Run Code Online (Sandbox Code Playgroud)

设置.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'card.apps.CardConfig',
    'members.apps.MembersConfig',
    'search.apps.SearchConfig',
    'products.apps.ProductsConfig',
    'rest_framework',
]

AUTH_USER_MODEL = …
Run Code Online (Sandbox Code Playgroud)

django django-custom-user

8
推荐指数
1
解决办法
7118
查看次数

如何验证用户身份

我创建了两种不同类型的用户 - 卡车和公司。这是我的用户注册页面在此输入图像描述

注册后,有关用户是卡车还是公司的数据将进入数据库。

在我的登录页面中,登录页面

只需输入电子邮件和密码。在我的自定义用户创建表单中,我添加了字段 username = email。

当我尝试使用有效凭据登录时,该页面不会根据用户类型将我重定向到特定页面。相反,我在 login.html 中为无效凭据创建的错误正在引发 - “您的电子邮件和密码不匹配。请重试。”

这是我的代码:

视图.py:

def login_view(request):
title = "Login"

if request.method == 'POST':

    form = LoginForm(data=request.POST)
    email = request.POST.get('email', '')
    password = request.POST.get('password', '')
    user = auth.authenticate(username=email, password=password)
    if form.is_valid():
        auth.login(request, user)
        user_type = form.cleaned_data['Label']
        if user.is_active & user_type == 'Truck':
            return HttpResponseRedirect('/post_load/')
        elif user_type == 'Company':
            return HttpResponseRedirect('/live_deal/')
else:
    form = LoginForm()

return render(request, 'registration/login.html', {'form' : form, 'title': title})
Run Code Online (Sandbox Code Playgroud)

网址.py:

# url(r'^login/$', views.login_view),
# url(r'^accounts/login/$', views.login_view), …
Run Code Online (Sandbox Code Playgroud)

django django-authentication django-login django-custom-user

7
推荐指数
1
解决办法
2万
查看次数

django中的自定义用户引发了ValueError

即使这个简单的例子也会抛出一段ValueError: Dependency on app with no migrations: myApp时间python manage.py syncdb

对myApp/models.py

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass
Run Code Online (Sandbox Code Playgroud)

settings.py

AUTH_USER_MODEL = 'myApp.User'
Run Code Online (Sandbox Code Playgroud)

./manage syncdb在django中运行== 1.6.5 <<有效

Creating tables ...
Run Code Online (Sandbox Code Playgroud)

./manage syncdb在django == 1.7 <<中运行

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/bdhammel/Documents/web_development/tutorials/python_social_auth/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/Users/bdhammel/Documents/web_development/tutorials/python_social_auth/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/bdhammel/Documents/web_development/tutorials/python_social_auth/env/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/bdhammel/Documents/web_development/tutorials/python_social_auth/env/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute …
Run Code Online (Sandbox Code Playgroud)

python django django-custom-user django-1.7

6
推荐指数
2
解决办法
1万
查看次数

在迁移中访问 django-custom-user manager 方法

我想在 django 1.7 项目的数据迁移中植入超级用户记录。我正在使用django-custom-user应用程序。我的迁移如下所示:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations

def load_data(apps, schema_editor):
    EmailUser = apps.get_model('custom_user', 'EmailUser')
    root = EmailUser.objects.create_superuser(email='admin@somesite.com', password='supersecure')


class Migration(migrations.Migration):
    dependencies = [
        ('accounts', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(load_data)
    ]
Run Code Online (Sandbox Code Playgroud)

运行时./manage.py migrate出现以下错误:

Running migrations:
  Applying accounts.0002_initial_data...Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line …
Run Code Online (Sandbox Code Playgroud)

python django django-custom-user

6
推荐指数
2
解决办法
3384
查看次数

在 Django 1.11 中为自定义用户添加额外的字段

我有一个自定义用户模型,它是由AbstractUser添加的自定义字段子类化的。

# model.py
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    ADM = 'admin'
    MEMBER = 'member'
    ROLE_CH = ((ADM, 'Administrator'), (MEMBER, 'Member'))

    role = models.CharField(max_length=20, choices=ROLE_CH, blank=True)
Run Code Online (Sandbox Code Playgroud)

此模型也注册为默认身份验证模型 settings.py

# settings.py
AUTH_USER_MODEL = "main.CustomUser"
Run Code Online (Sandbox Code Playgroud)

然后admin.py根据文档,我创建了一个自定义表单,该表单扩展UserCreationForm并将其注册到自定义用户。

# admin.py
from django.contrib import admin
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = UserCreationForm.Meta.fields + ('role',)

class CustomUserAdmin(UserAdmin):
    add_form = …
Run Code Online (Sandbox Code Playgroud)

django django-admin django-custom-user

6
推荐指数
1
解决办法
3120
查看次数

login() 缺少 1 个必需的位置参数:“用户”

这是我的看法,

def login_view(request) :
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
          email = form.cleaned_data['email']
          password = form.cleaned_data['password']
          user = authenticate(email=email, password=password)

          if user is not None:
              form = LoginForm()
              login(request, user)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

login() missing 1 required positional argument: 'user'
Run Code Online (Sandbox Code Playgroud)

另外,我正在使用自定义用户模型

我的urls.py

urlpatterns = [
path('',views.register, name='register' ),
path('form',views.form, name = 'form'),
path('login',views.login, name = 'login ')]
Run Code Online (Sandbox Code Playgroud)

python django django-login django-custom-user

6
推荐指数
1
解决办法
9335
查看次数

Wagtail:将图像添加到自定义用户模型

我正在按照 Wagtail 文档来自定义用户模型。我想将图像添加到用户模型中。

Django 版本:2.0.8,Wagtail 版本:2.1

问题

使用图像选择器字段选择图像并单击“保存”后,出现以下错误:

'没有提交文件。检查表单上的编码类型。”

代码

模型.py

from django.db import models

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    display_image = models.ForeignKey('wagtailimages.Image', 
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+')
Run Code Online (Sandbox Code Playgroud)

表格.py

from django import forms
from django.utils.translation import ugettext_lazy as _

from wagtail.users.forms import UserEditForm, UserCreationForm
from wagtail.images.widgets import AdminImageChooser

class CustomUserEditForm(UserEditForm):
    display_image = forms.ImageField(
        widget=AdminImageChooser(), label=_('Autorenbild'))

class CustomUserCreationForm(UserCreationForm):
    display_image = forms.ImageField(
        widget=AdminImageChooser(), label=_('Autorenbild'))}
Run Code Online (Sandbox Code Playgroud)

编辑.html

{% extends "wagtailusers/users/edit.html" %}

{% block extra_fields %}
    {% include "wagtailadmin/shared/field_as_li.html" with field=form.display_image %}
{% …
Run Code Online (Sandbox Code Playgroud)

python django django-custom-user wagtail

5
推荐指数
1
解决办法
3191
查看次数

编写 Django 注册表单测试来检查新用户创建

在 Django 中实现了自定义用户模型,并允许用户使用 URL http://127.0.0.1:8000/users/signup/进行注册。对此 url 的 GET 请求显示如下:

在此输入图像描述

我已经为此页面编写了测试。测试是否get按预期工作。

我编写测试的post目的是让帖子在测试数据库中创建一个用户。之后我可以编写测试来确认是否创建了用户以及用户名是否匹配等等。但似乎用户没有被创建。以下是我的测试

class SignUpPageTests(TestCase):
    def setUp(self) -> None:
        self.username = 'testuser'
        self.email = 'testuser@email.com'
        self.age = 20
        self.password = 'password'

    def test_signup_page_url(self):
        response = self.client.get("/users/signup/")
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, template_name='signup.html')

    def test_signup_page_view_name(self):
        response = self.client.get(reverse('signup'))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, template_name='signup.html')

    def test_signup_form(self):
        response = self.client.post(reverse('signup'), data={
            'username': self.username,
            'email': self.email,
            'age': self.age,
            'password1': self.password,
            'password2': self.password
        })
        self.assertEqual(response.status_code, 200)

        users = get_user_model().objects.all()
        self.assertEqual(users.count(), 1)
Run Code Online (Sandbox Code Playgroud)

users.count() 结果是 0,我的测试失败了。我哪里错了?

python django django-forms django-unittest django-custom-user

5
推荐指数
1
解决办法
3987
查看次数