【发布时间】:2019-07-16 09:23:34
【问题描述】:
我想检查用户注册。
如果用户名已经注册,给用户一个验证错误。
在我的终端环境中,data_user 字典也打印出来了 但在我的表单注册中,用户名验证错误不适用于 help.html 这是同一个表格。 ---> https://imgur.com/a/osAv0xn
models.py
>from django.db import models
class SignUpModel(models.Model):
name = models.CharField(max_length=20,null=True)
family = models.CharField(max_length=30,null=True)
username = models.CharField(max_length=10)
email = models.EmailField(null=True,unique=True)
password = models.CharField(max_length=20,null=True)
# Create your models here.
class LoginModel(models.Model):
username = models.CharField(max_length=15)
password = models.CharField(max_length=20)
views.py
>from django.shortcuts import render
from .forms import *
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required()
def blogPostSignUpView(request):
form = BlogPostSignUpModelForm(request.POST or None)
if form.is_valid():
form.save()
print(form.cleaned_data)
form = BlogPostSignUpModelForm()
template_name = "help.html"
context = {"title":"register","form":form}
return render(request,template_name,context)
@staff_member_required
def blogPostLoginView(request):
form = BlogPostLoginModelForm(request.POST or None)
if form.is_valid():
obj = form.save(commit=False)
obj.save()
template_name = 'help.html'
context = {"title":"login","form":form}
return render(request,template_name , context)
forms.py
>from django import forms
from .models import SignUpModel,LoginModel
#Sign UP Form
class BlogPostSignUpForm(forms.Form):
name = forms.CharField()
family = forms.CharField()
username = forms.CharField()
email = forms.CharField(widget=forms.EmailField)
password = forms.CharField()
class BlogPostSignUpModelForm(forms.ModelForm):
class Meta:
model = SignUpModel
fields = ['name','family','username','email' , 'password']
def check_password(self, *args, **kwargs):
uname = self.cleaned_data.get('username')
data_user = SignUpModel.objects.filter(username=uname)
print(data_user)
if data_user:
if uname == data_user['username']:
raise forms.ValidationError("This user has exist !!!")
return uname
#Login Form
class BlogPostLoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
class BlogPostLoginModelForm(forms.ModelForm):
class Meta:
model = LoginModel
fields = ['username','password']
urls.py
>from django.urls import path
from .views import (
blogPostSignUpView,
blogPostLoginView
)
urlpatterns = [
path('signup/',blogPostSignUpView),
path('login/',blogPostLoginView),
]
help.html
{% extends "base.html" %}
{% block username%}
{{request.user}}
{% endblock %}
{% block form %}
<div class="container" >
<div class="row">
<div class="col-md-5 mx-auto">
<div id="first">
<div class="myform form ">
<div class="logo mb-3">
<div class="col-md-12 text-center">
<h1>register</h1>
</div>
</div>
<form action="" method="post" name="login" > {% csrf_token %}
<div class="form_django">
{{ form.as_p }}
</div>
<button type="submit">Send</button>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
我错过了什么?
【问题讨论】:
-
你在同一个变量中实例化空表单,从你的views.py中删除这一行
form = BlogPostSignUpModelForm() -
你不能这样做。使用 Django 的内置身份验证。
-
这不是我找到答案的原因,下面我贴出来。谢谢@NalinDobhal,
标签: django python-3.x validation django-forms django-views