我是django的新朋友。我正在尝试将已经制作的html文件连接到django后端,而不重建整个文件。 已经在python中创建了表单和视图,但不知道要在html文件中放置什么内容。
视图类:
class signup(View):
template = loader.get_template('signup.html')
form_class = UserRegistrationForm
def get(self, request):
form = self.form_class(None)
return render(request, 'signup.html', {'form': form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
current_user = form.save(commit=False)
email = form.cleaned_data['email']
password = form.cleaned_data['password']
current_user.set_password(password)
current_user.save()
userToAuthenticate = authenticate(email=email, password=password)
if userToAuthenticate is not None:
if userToAuthenticate.is_active:
login(request, userToAuthenticate)
return redirect('siteViews:index')
return render(request, 'signup.html', {'form': form})
表单代码:
class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = ['email', 'password']
和html代码:
<div id="registersquare">
<div id="panel">
<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<label for="email">Email adress:</label>
<input type="email" id="username" name="email}">
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<label for="password">Repeat password:</label>
<input type="password" id="password" name="repeatedpassword">
<label class="control-label col-sm-2" for="password">{{ field.label_tag }}</label>
<div id="lower">
<input type="checkbox"><label class="check" for="checkbox"><a style="color: #999999;" href="#">I Accept Website Terms And Conditions.</a></label>
<input type="submit" value="Sign up">
</div>
</form>
</div>
</div>
任何人都可以解释该怎么做? 欢呼
答案 0 :(得分:0)
您需要从html文件中删除标签和输入,并在{% csrf_token %}
,{{form.as_p}}
之后添加此标签,这是一个开始。您还使用的是Django的旧版本,我知道的原因是,当您定义ModelForm时,您在将forms.ModelForm
更改为ModelForm时编写了pip install -U Django
,以升级书写方式
Django ModelForm
您实际上创建了两种形式,一种仅包含html,一种仅使用Django,您没有将ModelForm应用于您的html文件,而是仅创建了html表单,而不是呈现了Redis::OPT_PREFIX
的html。
答案 1 :(得分:0)
您已经创建了一个表单,它不是Django的表单,因此您实际上不必在forms.py
中编写任何内容,因为它的目的是基于模型结构创建表单并根据以下内容执行验证到定义的字段。
现在,您必须从表单中获取数据并执行验证并亲自在视图中进行检查。因此post
将是
def post(self, request):
email = request.POST.get('email') # get value in name="email" field
password = request.POST.get('password')
repeatedpassword = request.POST.get('repeatedpassword')
if password == repeatedpassword: # manual validation to check if both string are same
# Other Validations code here and
# Register or Login etc functions here
return render(request, 'signup.html', {'form': form})