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 ...
随机推荐
- |与|| ,&与&& 分别表示什么意思?
| & 表示位运算,针对数值进行的运算,例如 3 | 2 .78 & 99,其结果仍然应为值数 || && 表示逻辑运算,||表示或者的意思,&& 表示 ...
- 关于ti环境搭建 IAR 为什么IAR不能跳转的真正原因
1.IAR工程莫名其妙的错误,可以通过复制工程文件来解决 2.cc2540环境配置,尽量默认到c盘,以便解决不必要的麻烦,另外,不同的库尽量安装对应的环境文件,比如freertos等环境 3.对于蓝牙 ...
- python-----多线程、线程池、进程池
import threadingimport time ###############################多线程################################------ ...
- jquery基础学习之样式篇(一)
一.安装与使用 官网下载,然后引入 <script src="js/jquery-3.3.1.js"></script>,这是生产版本,开发版本替换成min ...
- spring根据name或者id获取实例
@Resource(name="beanname") private ClassType scheduler; 其中ClassType需要跟实例的类型对应上.
- java中获取字母和数字的组合
package com.ccytsoft.wkc.util; import java.util.ArrayList; import java.util.List; import java.util.R ...
- No module named pip 安装工具提示没有pip模块时,解决办法
python2:cmd命令窗口下执行命令: python -m ensurepipe easy_install pip # 若有权限错误,则在命令前面添加sudosudo easy_install p ...
- java 网络编程(三)简单的即时通讯(UDP传输)
发送端: package cn.sasa.netDemo2; import java.io.IOException; import java.net.DatagramPacket; import ja ...
- oracle查看哪些表被锁
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where a ...
- 关于安装SVN Service 出错 Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details
关于安装SVN Service 出错 Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in ...