配置省略。 从templates中的regist.html文件开始。
input标签的placeholder属性: placeholder 属性规定可描述输入字段预期值的简短的提示信息(比如:一个样本值或者预期格式的短描述)。
该提示会在用户输入值之前显示在输入字段中。
注意:placeholder 属性适用于下面的 input 类型:text、search、url、tel、email 和 password。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>regist</title>
</head>
<body>
<form action="" method="">
<input type="text" placeholder="用户名" />
<input type="password" placeholder="密码" />
<input type="submit" value="提交" />
</form>
</body>
</html>
![在这里插入图片描述](https://img-blog.csdnimg.cn/fb260e16ceaa4e24894f68ee54ce7bf8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NjeHh4cXE=,size_20,color_FFFFFF,t_70,g_se,x_16) 这里的name<form action="{% url 'regist' %}" method="POST"> ,就是我们在app urls中定义路由时的name。我们在编写前端代码时,直接将name传递给url就可以了。 这样有一个好处就是,不管path的url怎么变化,只要name我们不改,就不需要修改这部分的代码。
给input 写入name
<form action="{% url 'regist' %}" method="POST">
<label>用户名</label><input type="text" name="username" placeholder="用户名" /><br>
<label>密码</label><input type="password" name="password" placeholder="密码" /><br>
<input type="submit" value="提交" />
</form>
后端接收一下post的值
def post(self, request):
username = request.POST.get('username')
password = request.POST.get('password')
print('username:', username)
print('password:', password)
return redirect('/regist')
from django.shortcuts import render, redirect redirct:接受一个URL参数,表示让浏览器跳转去指定的URL
然后,我们在浏览器提交一下试一下。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/99fef0b42e404c8194edc37d76cb6917.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NjeHh4cXE=,size_20,color_FFFFFF,t_70,g_se,x_16) 出现了forbidden。是一个防止跨站请求的验证。 然后我们在HTML中加上一个{% csrf_token %}
<form action="{% url 'regist' %}" method="POST">
{% csrf_token %}
<label>用户名</label><input type="text" name="username" placeholder="用户名" /><br>
<label>密码</label><input type="password" name="password" placeholder="密码" /><br>
<input type="submit" value="提交" />
</form>
![在这里插入图片描述](https://img-blog.csdnimg.cn/8c7875cd20814a35b8f3002b42f62e96.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NjeHh4cXE=,size_20,color_FFFFFF,t_70,g_se,x_16) 出现了一个hidden 隐藏区域,csrfmiddlewaretoken,一个加密的key。 token会随着我们前端的请求,提交到我们的后端。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/67e71596ccee4b5e9ef809b0ffb7fa15.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NjeHh4cXE=,size_20,color_FFFFFF,t_70,g_se,x_16) settings中的这个请求就是去验证是否是一个跨站请求的。 **跨站请求:**比如谷歌想通过前端去请求百度的后端,这就属于跨站请求,就不被允许。 如果想验证成功,就需要加上csrf_token。
我们再提交一次,就发现我们的后台接收到了username和password的内容。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f7f3288fe6a64586a50c2f6bd69bb3fe.png) 因为我们之前在post那里做了一个重定向,提交之后又跳转到当前页面了。
Django表单
在app中新建一个forms.py
from django import forms
from django.forms import fields
class Auth(forms.Form):
username = fields.CharField(max_length=18, required=True)
password = fields.CharField(widget=forms.PasswordInput)
views.py中
from .forms import Auth
class Regist(View):
TEMPLATE = 'regist.html'
def get(self, request):
form = Auth()
return render(request, self.TEMPLATE, {'form': form})
在html中:
<form action="{% url 'regist' %}" method="POST">
{% csrf_token %}
{{form.as_table}}
<input type="submit" value="提交" />
</form>
加了一句{{form.as_table}} ![在这里插入图片描述](https://img-blog.csdnimg.cn/1f7efee2512b4b9cabbc2f7054a77e10.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NjeHh4cXE=,size_20,color_FFFFFF,t_70,g_se,x_16) 如果把password里面定义的属性去掉,那么password就是一个text类型。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/49ec146a9585413d9c83dd2406d841ac.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2NjeHh4cXE=,size_20,color_FFFFFF,t_70,g_se,x_16) 输入内容也都能看到。
这时我们再在前端提交一下 ![在这里插入图片描述](https://img-blog.csdnimg.cn/647fa58afb75470a9b44e356fac09eb5.png) 依旧成功接收到啦。
如果我们想在后端接收并使用表单
def post(self, request):
form = Auth(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
print('username:', username)
print('password:', password)
return redirect('/regist')
cleaned_data是指我们经过验证之后,纯正的数据
我们前端提交一下,后端依旧接收到了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e638dc7973474a869b46ebc17bcedce8.png)
username = form['username']
password = form['password']
看一下如果不写cleaned_data我们的form里面是什么 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d021760d78fa4ccf9a5ba3ba21137b0d.png) 都是前端的input标签
|