django-forms - 如何在不使用 django 表单的情况下验证 django 中的模板版本化表单字段?
问题描述
我编写了一个小型身份验证应用程序,在其中使用了手动模板渲染。我可以从表单中获取和更新数据,但我只想验证这些字段。但是我无法继续前进,因为我没有使用任何 Django 表单模型。客户端验证正在进行中,但是服务器端验证呢。
使用 python v3 和 Django v2 我没有使用 forms 模型没有从 forms.py 继承。那我怎么验证??我的注册模板文件。`
<form action="{% url 'register' %}" method="post">
{% csrf_token %}
{% for message in messages %}
<div class="alert {% if message.tags %} alert-{{ message.tags }}{% endif %}">{{ message|safe }}</div>
{% endfor %}
<h3>Registration Form</h3>
<div class="form-group">
<input type="text" name="first_name" placeholder="First Name" class="form-control" required>
<input type="text" name="last_name" placeholder="Last Name" class="form-control" required>
</div>
<div class="form-wrapper">
<input type="text" name="email" placeholder="Email Address" class="form-control" required>
<i class="zmdi zmdi-email"></i>
</div>
<div class="form-wrapper">
<input type="text" name="phone" placeholder="Phone" class="form-control" required>
<i class="zmdi zmdi-phone"></i>
</div>
<div class="form-wrapper">
<input type="password" name="password1" placeholder="Password" class="form-control" required>
<i class="zmdi zmdi-lock"></i>
</div>
<div class="form-wrapper">
<input type="password" name="password2" placeholder="Confirm Password" class="form-control"
required>
<i class="zmdi zmdi-lock"></i>
</div>
<button>Register
<i class="zmdi zmdi-arrow-right"></i>
</button>
</form>
</div>
</div>
`视图.py
def register(request):
if request.method == "POST":
first_name = request.POST['first_name']
last_name = request.POST['last_name']
phone = request.POST['phone']
email = request.POST['email']
password1 = request.POST['password1']
password2 = request.POST['password2']
if password1 == password2:
if User.objects.filter(phone=phone).exists():
messages.info(request, 'Requested phone exists')
elif User.objects.filter(email=email).exists():
messages.info(request, 'Requested email exists')
return redirect('register')
else:
user = User.objects.create_complete_user(first_name=first_name, last_name=last_name, phone=phone,
email=email, password=password1)
user.save()
messages.info(request, 'successfully user object is created')
return redirect('login')
else:
messages.info(request, 'Passwords not matching')
return redirect('register')
else:
return render(request, 'signup.html')
解决方案
我能想到的将表单与 Django 分开添加的唯一情况是,当您的前端和后端分开并且它们通过 API 进行通信时。如果是这种情况,您应该使用序列化程序进行验证。更多细节在这里:https ://www.django-rest-framework.org/api-guide/serializers/
如果您在 Django 中有特殊情况,并且仍想使用编码的 HTML 表单,您还需要创建一个 Django 表单来反映您在 HTML 中制作的表单。假设您有以下 HTML 输入类型:
<form>
<input type="email" name="my_email">
<input type="text" name="my_text">
<input type="file" name="my_file">
</form>
您在 django 中的表单必须相同
#forms
class Myform(forms.Form):
my_email = forms.EmailField()
my_text = forms.CharField()
my_file = forms.FileField()
# view
def myview(request):
myform = Myform(request.POST, request.FILES)
if myform.is_valid():
# Cleaned and validated data
my_email = myform.cleaned_data["my_email"]
my_text = myform.cleaned_data["my_text"]
my_file = myform.cleaned_data["my_file"]
# Do here whatever you need to do with
切勿保存未经验证和清理的数据。
# Never do this.
def myview(request):
my_email = request.POST["my_email"]
request.user.email = my_email
request.user.save()
注意:这是未经测试的代码,可能无法按原样工作。但它可以作为你应该做什么的一个例子。
推荐阅读
- scala - 是什么导致了 MissingRequirementError: object scala not found 斯坦福主题建模工具箱中的错误?
- jquery - 使用 jQuery 计算一组输入的总和
- javascript - 按钮“onclick”不起作用(被检测到)
- c# - 如何从存储过程中检索单个值
- html - VSC 中的 emmet 功能在编辑设置后不起作用
- javascript - 如何只显示几个分页自定义bulletRender
- r - 从R中的多列中删除字符串
- javascript - 围绕现有的 INPUT-tag WRAP span-tag
- pdf - 使用 iText 2.1.7 或数字签名服务从 pdf 获取哈希
- c# - 从文件中读取一行后如何获取当前文件位置?