如何在另一个模型中添加注册数据,并从django中的数据登录



最近我遇到了一个注册问题。我在我的项目中制作了一个**账户**应用程序进行注册。我不想在默认用户模型中以dB保存数据。我正在尝试建立一个电子商务网站,人们可以在这里注册购买产品。注册和登录的最佳方式是什么?扩展用户模型本来可以解决这个问题,但我想要一个完全不同的模型,用于那些想要购买产品进行注册和登录的用户。这是我想的最好的电子商务网站注册方式吗?我该怎么做?

我认为这就是您所需要的:

  1. 制作您的自定义用户模型,您可以在其中添加任何您想要的字段(因此,这是您为想要购买产品的用户制作"完全不同的模型"的方法(:
from django.db import models
from django.contrib.auth.models import User
class MyUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
myField1 = models.CharField(max_length=100)
myField2 = models.CharField(max_length=100)
myField3 = models.CharField(max_length=100)
  1. 在settings.py中添加(myapp-应用程序的名称(:
AUTH_USER_MODEL = 'myapp.MyUser'
  1. 制作自定义UserCreationForm:
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class MyRegisterForm(UserCreationForm):
class Meta:
model = MyUser
fields = UserCreationForm.Meta.fields + ('myField1', 'myField2', 'myField3')
class MyLoginForm(forms.ModelForm):
class Meta:
model = MyUser
fields = UserCreationForm.Meta.fields + ('myField1', 'myField2', 'myField3')

  1. 在views.py中添加:
from . import forms
from django.contrib.auth import views as auth_views
def register_view(request, *args, **kwargs):
if request.method == "POST":
form = forms.MyRegisterForm(request.POST)
if form.is_valid():
form.save()
else:
form = forms.MyRegisterForm()
return render(request, 'register.html', {'form': form})
class MyLoginView(auth_views.LoginView):
redirect_authenticated_user = True
form_class = forms.MyLogInForm
  1. 在urls.py中添加:
urlpatterns = [
path('login/', views.MyLoginView.as_view(template_name='login.html'), name='login'),
path('register/', views.register_view, name='register'),
]

最新更新