前台用 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(表单)的更多相关文章

  1. django form表单验证

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...

  2. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  3. Django form表单 组件

    目录 Django form表单 组件 Form 组件介绍 普通方式手写注册功能 使用form组件实现注册功能 Form 常用字段与插件 常用字段(必备) 字段参数(必备) 内置验证(必备) 自定义效 ...

  4. Django form表单

    Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...

  5. Django Form表单组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  6. django Form 表单 总结与小实例

    开头寄语: 这几天一直在看Django的form表单验证,然后想对于这几天要有个总结. 首先,先来看一下找到的一个form表单验证的流程: 验证过程 流程详解1. 函数full_clean()依次调用 ...

  7. Django学习笔记之Django Form表单详解

    知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的 ...

  8. django Form表单的使用

    Form django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form ...

  9. python django Form表单

    Django 拥有自己独立的表单功能块,可以完成: 1.表单的定义 2.表单的校验 3.表单的前端样式 等功能,方便我们开发,那么接下来,我们看一下表单的定义 首先我们确定我们要编写的功能,一个提供给 ...

  10. Django Form表单学习总结

    Form中添加自定义的验证:    1.对特定字段属性的验证;    2.包含多字段的验证. 先创建一个简单的Form: from django import forms class ContactF ...

随机推荐

  1. .NET Core开发日志——从搭建开发环境开始

    .NET Core自2016年推出1.0版本开始,到目前已是2.1版本,在其roadmap计划里明年更会推出3.0版本,发展不可不谓之迅捷.不少公司在经过一个谨慎的观望期后,也逐步开始将系统升级至最新 ...

  2. docker swarm 英文参考资料阅读列表

    将自己在使用 docker swarm 过程中阅读的英文参考资料收集在这篇博文中,便于以后查阅与温习,顺带分享. 2017年8月5日之前阅读 My experience with Docker Swa ...

  3. eclipse安装Hadoop-0.20.2插件

    因为在使用Hadoop-0.20.2这个古董,需要使用它自带的eclipse插件,而我最初安装的是现代的eclipse4.10.0. 在经历两天,以及以下种种尝试之后,均以失败告终: 1.网上找适合的 ...

  4. 石子合并 区间dp模板

    题意:中文题 Description 在操场上沿一直线排列着 n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分.允许在第一次合 ...

  5. angular ajax请求 结果显示显示两次的问题

    angular 项目中,由于用到ajax 请求,结果显示如下情况 同样的接口,显示两次,其中第一次请求情况为 request method 显示为opttions 第二次的情况是 为啥会出现如此的情况 ...

  6. 美团点评基于 Flink 的实时数仓建设实践

    https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651749037&idx=1&sn=4a448647b3dae5 ...

  7. 理解HTTP协议(转载)

    一.HTTP协议的演进 HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向 ...

  8. Appium入门(9)—— Appium API

    摘自:http://www.testclass.net/appium/appium-base-api-01/ 1.安装: installApp() driver.installApp("d: ...

  9. 自动化测试:java + testng + maven + reportng + jenkins + selenium (一)_基于win环境

    集成环境:jdk1.7 + tomcat1.7+ eclipse mars + maven + testng6.14.2 + selenium-java2.40.0 + reportng1.1.4 + ...

  10. P1896 [SCOI2005]互不侵犯 状压dp

    正解:状压dp 解题报告: 看到是四川省选的时候我心里慌得一批TT然后看到难度之后放下心来觉得大概没有那么难 事实证明我还是too young too simple了QAQ难到爆炸TT我本来还想刚一道 ...