python - 我的注册表单不适用于 django python
问题描述
我的应用程序有问题,注册未在后端创建配置文件。我曾尝试使用 django 表单,但我不喜欢它们的呈现方式,所以我想使用自定义表单,但是一旦我单击按钮提交,什么都没有发生,我检查后端没有配置文件。
我的 forms.py 文件看起来像这样
from django.forms import ModelForm from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from .models import Gig class GigForm(ModelForm): class Meta: model = Gig fields = ['title','category','description', 'price', 'photo', 'status'] class SignUpForm(forms.ModelForm): first_name = forms.CharField(max_length=30, required=False, help_text='Optional.') last_name = forms.CharField(max_length=30, required=False, help_text='Optional.') email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.') class Meta: model = User fields = ('username', 'first_name', 'last_name', 'email', 'password' )
- Models.py 文件是这样的
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) avatar = models.CharField(max_length=500) about = models.CharField(max_length=500) location = models.CharField(max_length=30, blank=True) def __str__(self): return self.user.username
signup.html 看起来像这样
<div class="container1"> <img src="{% static 'img/home-banner.jpg' %}" class="banner"> <form action="#" name="myForm" method="post" onsubmit="return(validate());"> {% csrf_token %} <div class="container-fluid"> <div class="row"> <div class="well center-block"> <div class="well-header"> <h1 class="text-center "><b>Sign Up</b></h1> </br> <hr> </div> <div class="row"> <div class="col-md-12 col-sm-12 col-xs-12"> <div class="form-group"> <div class="input-group"> <div class="input-group-addon"> <i class="glyphicon glyphicon-user"></i> </div> <input type="text" placeholder="First Name" class="form-control" name="{{ form.first_name.name }}" id="{{ form.first_name.id_for_label }}" {% if form.name.value != None %}value="{{ form.first_name.value|stringformat:'s' }}"{% endif %} maxlength="{{ form.first_name.field.max_length }}" {% if form.name.field.required %}required{% endif %}> </div> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <div class="input-group"> <div class="input-group-addon"> <i class="glyphicon glyphicon-user"></i> </div> <input type="text" placeholder="Last Name" name="txtlname" class="form-control" name="{{ form.last_name.name }}" id="{{ form.last_name.id_for_label }}" {% if form.name.value != None %}value="{{ form.last_name.value|stringformat:'s' }}"{% endif %} maxlength="{{ form.last_name.field.max_length }}" {% if form.name.field.required %}required{% endif %}> </div> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <div class="input-group"> <div class="input-group-addon"> <i class="glyphicon glyphicon-user"></i> </div> <input type="text" placeholder="User Name" name="txtlname" class="form-control" name="{{ form.username.name }}" id="{{ form.username.id_for_label }}" {% if form.name.value != None %}value="{{ form.username.value|stringformat:'s' }}"{% endif %} maxlength="{{ form.username.field.max_length }}" {% if form.username.field.required %}required{% endif %}> </div> </div> </div> </div> <div class="row"> <div class="col-md-12 col-sm-12 col-xs-12"> <div class="form-group"> <div class="input-group"> <div class="input-group-addon"> <i class="glyphicon glyphicon-lock"></i> </div> <input type="password" minlength="8" maxlength="20" placeholder="Password" name="txtpass" class="form-control" name="{{ form.password.name }}" id="{{ form.password.id_for_label }}" {% if form.password.value != None %}value="{{ form.password.value|stringformat:'s' }}"{% endif %} maxlength="{{ form.password.field.max_length }}" {% if form.password.field.required %}required{% endif %}> </div> </div> </div> </div> <div class="row"> <div class="col-md-12 col-xs-12 col-sm-12"> <div class="form-group"> <div class="input-group"> <div class="input-group-addon"> <i class="glyphicon glyphicon-envelope"></i> </div> <input type="email" class="form-control" name="txtmail" placeholder="E-Mail" name="{{ form.email.name }}" id="{{ form.email.id_for_label }}" {% if form.password.value != None %}value="{{ form.email.value|stringformat:'s' }}"{% endif %} maxlength="{{ form.email.field.max_length }}" {% if form.password.field.required %}required{% endif %}> </div> </div> </div> </div> <div class="row widget"> <div class="col-md-12 col-xs-12 col-sm-12"> <button class="btn btn-warning btn-block"> Submit </button> </div> </div> </div> </div> </div> </form>
Views.py 看起来像这样
def signup(request): if request.method == 'POST': form = SignUpForm(request.POST) if form.is_valid(): form.save() user.refresh_from_db() username = form.cleaned_data.get('username') user.save() raw_password = form.cleaned_data.get('password1') user = authenticate(username=user.username, password=raw_password) login(request, user) return redirect('home.html') else: form = SignUpForm() return render(request, 'signup.html', {'form': form})
解决方案
配置文件模型的字段与您在注册表单中传递的字段不同
在您的个人资料模型中
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.CharField(max_length=500)
about = models.CharField(max_length=500)
location = models.CharField(max_length=30, blank=True)
def __str__(self):
return self.user.username
您是否忘记在您的表单中创建这些字段。py 这个链接将帮助您
推荐阅读
- c++ - 如何构造一个不可移动不可复制对象的元组?
- javascript - TextInput 输入空格
- sql - 如何在 Google BigQuery 中导出 Google 优化数据?
- perl - Perl Excel::Writer::XLSX Excel 函数 Move Area.function 的正确语法
- raspberry-pi - Raspbian 是实时操作系统吗?
- reactjs - 如何仅虚拟化列表项的底部?
- object - 如果是可扩展对象类型,我应该如何指向记录字段?
- firebase - 未针对使用自定义域创建的 Firebase 动态链接跟踪分析
- docker - 如何使用 Docker 在 AWS EC2 实例上安装 Lustre?
- google-colaboratory - 如何在 Colab 中安装和使用 IB API?