问题描述
我正在尝试使用 allauth 实现两种用户类型。我已经阅读了很多教程、文档等。仍然无法呈现我的自定义两个注册表单。当我在设置中添加 ACCOUNT_FORMS = { 'signup': ...} 使用哪个表单就可以了。但是对于两者都没有呈现。
模型.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
is_worker = models.BooleanField(default=False)
is_company = models.BooleanField(default=False)
class Worker(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE,primary_key=True)
image = models.ImageField(default="default.jpg",upload_to='profile_pics')
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
phone = models.IntegerField()
def __str__(self):
return f'{self.user.username}'
class Company(models.Model):
user = models.OnetoOneField(User,upload_to='profile_pics')
adrress = models.CharField(max_length=300)
phone = models.IntegerField()
def __str__(self):
return f'{self.user.username}'
forms.py
from . models import User,Worker,Company
from django import forms
from allauth.account.forms import SignupForm
class WorkerSignupForm(SignupForm):
first_name = forms.CharField(label='First Name',max_length=50,required=True,strip=True)
last_name = forms.CharField(label='Last Name',strip=True)
phone = forms.CharField(label='Mobile phone',max_length=15,strip=True)
def save(self,request):
user = super(WorkerSignupForm,self).save(request)
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.phone = self.cleaned_data.get('phone')
user.is_worker = True
user.save()
return user
class CompanySignupForm(SignupForm):
company_name = forms.CharField(label='Comapny name',max_length=100)
adrress = forms.CharField(label='Adrress',max_length=250)
phone = forms.CharField(label='Mobile phone',max_length=15)
def save(self,request):
user = super(CompanySignupForm,self).save(request)
user.company_name = self.cleaned_data.get('company_name')
user.adrress = self.cleaned_data.get('adrress')
user.phone = self.cleaned_data.get('phone')
user.is_company = True
user.save()
return user`
视图.py
from . forms import WorkerSignupForm,CompanySignupForm
from allauth.account.views import SignupView
class WorkerSignUpView(SignupView):
template_name = "customuser/worker_signup.html"
form_class = WorkerSignupForm
redirect_field_name = 'next'
view_name = "worker_signup_view"
success_url = None
def get_context_data(self,**kwargs):
kwargs['user_type'] = "is_worker"
worker_signup_view = WorkerSignUpView.as_view()
class CompanySignUpView(SignupView):
template_name = "customuser/company_signup.html"
form_class = CompanySignupForm
redirect_field_name = 'next'
view_name = "company_signup_view"
success_url = None
def get_context_data(self,**kwargs):
kwargs['user_type'] = "is_company"
company_signup_view = CompanySignUpView.as_view()
urls.py
from .views import worker_signup_view,company_signup_view
urlpatterns = [
path("signup/worker/",view=worker_signup_view,name="worker_signup_view"),path("signup/company/",view=company_signup_view,name="company_signup_view"),]
worker_signup.html
{% extends "base.html" %}
{% load i18n %}
{% block head_title %}{% trans "Signup" %}{% endblock %}
{% block content %}
<h1>Worker</h1>
<h1>{% trans "Sign Up" %}</h1>
<p>{% blocktrans %}Already have an account? Then please <a href="{{ login_url }}">sign in</a>.{% endblocktrans %}</p>
<form class="worker_signup_form" id="worker_signup_form" method="post" action="{% url 'worker_signup_view' %}">
{% csrf_token %}
{{ form.as_p }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<button type="submit">{% trans "Sign Up" %} »</button>
</form>
{% endblock content %}
解决方法
正确的获取上下文数据函数
if (isset($_GET['reader'])) {
$orders = simplexml_load_file($_GET['reader'],"SimpleXMLElement",LIBXML_NOERROR | LIBXML_ERR_NONE) or die("Error: Cannot create object");
//code
}else{
echo "Invalid request!";
}