Django Form(表单)
前台用 get 或 post 方法向后台提交一些数据。
GET方法:
html示例(保存在templates文件夹中):
<!DOCTYPE html>
<html>
<body>
<p>请输入两个数字</p> <form action="/add/" method="get">
a: <input type="text" name="a"> <br>
b: <input type="text" name="b"> <br> <input type="submit" value="提交">
</form> </body>
</html>
网页的值传到服务器是通过 <input> 或 <textarea> 标签中的 name 属性来传递的。
from django.http import HttpResponse
from django.shortcuts import render def index(request):
return render(request, 'index.html') def add(request):
a = request.GET['a']
b = request.GET['b']
a = int(a)
b = int(b)
return HttpResponse(str(a+b))
request.GET 可以看成一个字典,用GET方法传递的值都会保存到其中。可以用request.GET.get('key',None)来取值,没有时不报错。
- 使用 Django 表单(forms)
示例:
#forms.py
from django import forms class CommentForm(forms.Form):#评论表单
name = forms.CharField(label='称呼', max_length=16, error_messages={
'required':'请填写您的称呼',
'max_length':'称呼太长'
})
email = forms.EmailField(label='邮箱', error_messages={
'required':'请填写您的邮箱',
'max_length':'邮箱格式不正确'
})
content = forms.CharField(label='评论内容', max_length=150, error_messages={
'required':'请填写您的评论内容',
'max_length':'评论内容太长'
})
#models.py
class Comment(models.Model):
blog = models.ForeignKey(Blog)
name = models.CharField('name',max_length=16)
email = models.EmailField('email_addres')
content = models.TextField(max_length=120)
created = models.DateTimeField(auto_now_add=True)
#views.py
def get_details(request, p_id):
try:
blog = Blog.objects.get(id=p_id)
except Blog.DoesNotExist:
raise Http404
if request.method == 'Get':
form = CommentForm()
else:
form = CommentForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
content = form.cleaned_data['content']
Comment.objects.create(blog=blog, name=name, email=email, content=content)
#cleaned_date = form.cleaned_data
#cleaned_date['blog'] = blog
#Comment.objects.create(**cleaned_date)
ctx = {
'blog': blog,
'comments': blog.comment_set.all().order_by('-created'),
'form': form,
}
return render(request, 'get_details.html', ctx)
cleaned_data 就是读取表单返回的值,返回类型为字典dict类型。
email = form.cleaned_data['email'] 读取名为'email'的表单提交值,并赋予email变量。
上述代码中注释的部分是更为简便的方法。
Form的产出结果是一个字典,可以根据这个Form字典和**直接在数据库创建数据。
附上处理表单的HTML文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Get_Details</title>
</head>
<body>
<header>
<h3>{{ article.title }}</h3>
</header>
<p>{{ article.content }}</p>
<p>{{ article.created|date:"Y-m-d H:i" }}</p>
<div class="comments">
<h3>评论区</h3>
{% for comment in comments %}
<p>{{ comment.name }}</p>
<p>{{ comment.content }}</p>
<p>{{ comment.created }}</p>
{% endfor %}
</div>
<div class="add_comment">
<h3>提交评论</h3>
<form action="{% url 'get_details' blog.id %}" method="post">
{% csrf_token %}
{% for field in form %}
<div class="input-field">
{{ field.label }}: {{ field }}
</div>
{% endfor %}
<button type="submit">提交</button>
</form>
</div>
</body>
</html>
表格后面还有一个{% csrf_token %}的标签。csrf 全称是 Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。
Django 1.6的官方文档:http://django-chinese-docs-16.readthedocs.io/en/latest/
Django Form(表单)的更多相关文章
- django form表单验证
一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...
- Django form表单 组件
目录 Django form表单 组件 Form 组件介绍 普通方式手写注册功能 使用form组件实现注册功能 Form 常用字段与插件 常用字段(必备) 字段参数(必备) 内置验证(必备) 自定义效 ...
- Django form表单
Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...
- Django Form表单组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- django Form 表单 总结与小实例
开头寄语: 这几天一直在看Django的form表单验证,然后想对于这几天要有个总结. 首先,先来看一下找到的一个form表单验证的流程: 验证过程 流程详解1. 函数full_clean()依次调用 ...
- Django学习笔记之Django Form表单详解
知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的 ...
- django Form表单的使用
Form django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form ...
- python django Form表单
Django 拥有自己独立的表单功能块,可以完成: 1.表单的定义 2.表单的校验 3.表单的前端样式 等功能,方便我们开发,那么接下来,我们看一下表单的定义 首先我们确定我们要编写的功能,一个提供给 ...
- Django Form表单学习总结
Form中添加自定义的验证: 1.对特定字段属性的验证; 2.包含多字段的验证. 先创建一个简单的Form: from django import forms class ContactF ...
随机推荐
- 用C# 7.0的switch...case模式匹配取代一堆if语句
今天在重构代码时对下面的一堆if语句实在看着不顺眼. if(activation == null) { _logger.LogError("x1"); return Boolean ...
- html 常用标签 a form input 标签 等等等
前端HTML HTML介绍 Web服务本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk ...
- gensim Word2Vec 训练和使用(Model一定要加载到内存中,节省时间!!!)
训练模型利用gensim.models.Word2Vec(sentences)建立词向量模型该构造函数执行了三个步骤:建立一个空的模型对象,遍历一次语料库建立词典,第二次遍历语料库建立神经网络模型可以 ...
- 利用win10自带的虚拟机Hyper-V安装Centos7的步骤教程
1.设置开启Hyper-V应用程序? 在搜索功能里输入 Hyper-V 然后点击选中的部分 2.全部选中框中的部分,然后重新启动电脑 3.在搜索功能里输入Hyper-V 打开 4.点击新建--> ...
- rabbitmq简单实例
JMS组件:activemq(慢)AMQP组件(advance message queue protocol):rabbitmq和kafka 一..消息队列解决了什么问题?异步处理应用解耦流量削锋日志 ...
- toggle显示与隐藏切换
jQuery中显示与隐藏切换toggle方法 show与hide是一对互斥的方法.需要对元素进行显示隐藏的互斥切换,通常情况是需要先判断元素的display状态,然后调用其对应的处理方法.比如显示的元 ...
- http协议-https协议-相对协议
http协议.https协议.相对协议 http://www.baidu.com (使用http协议访问百度) https://wwww.badu.com (使用https协议访问百度) //www. ...
- iOS使用mask切割不规则图案
起点,终点要闭合: CGPathAddQuadCurveToPoint(path, NULL, viewSize.width * 0.5, viewSize.height, viewSize.widt ...
- 联系customer的js
import api from '@/js/api'; export var conService = function getInfoSend() { var loginState = localS ...
- SpringMVC(三):参数绑定、输入输出转换
一.参数解析绑定 1. 自定义绑定:不绑定某些项 @InitBinder private void initBinder(WebDataBinder dataBinder) { dataBinder. ...