前台用 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开发日志——WCF Client

    WCF作为.NET Framework3.0就被引入的用于构建面向服务的框架在众多项目中发挥着重大作用.时至今日,虽然已有更新的技术可以替代它,但对于那些既存项目或产品,使用新框架重构的代价未必能找到 ...

  2. io 流操作hdfs

    hdfs 文件上传 本地   -------->    文件系统对象   -------->    hdfs 文件系统 输入流                                ...

  3. [No000012D]WPF(5/7)依赖属性

    介绍 WPF带来了很多传统 Windows 应用程序没有的新特性和选择.我们已经讨论了一些 WPF 的特性,是时候更进一步介绍其他特性了.当你读完这个系列之前的文章,我希望你已经或多或少地了解了 WP ...

  4. ATM JAVA实现 部分代码

    package score;//信1705-2 20173600 王重阳 import java.util.Scanner; public class Main { public static voi ...

  5. eclipse debug模式

    eclipse debug模式 1.怎样在Eclipse中设置断点 方法/步骤 1 首先打开工程项目 2 第一种是,把鼠标移动想要设置断点的行,在行号前面空白地方双击,就会出现断点 3 第二种是,在菜 ...

  6. 《linux 进程管理》- ps/top/kill/nice

    一:进程简述 二:ps 查看进程 语法 ps * -A 列出所有进程,和 -e 同等效果 * -a 列出不和本终端有关系的所有进程 * -w 显示加宽,可以显示较多信息 * -u 显示有效使用者相关的 ...

  7. java jdk安装配置

    1. 配置java_home 2. path添加: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 3. 添加CLASSPATH路径: .;%Java_Home%\bin;% ...

  8. threadPoolExecutor的基本解析

    线程池的构造方法中常见参数简介 corepoolsize:核心线程数,即便这里的线程处于空闲状态,也不会被回收,会一直存在线程池中 maxmumpoolsize:线程池所能容纳的最大线程数,超过这个数 ...

  9. vue router拦截器的简单使用

    之前,为了实现router跳转的每个页面的url上都带上addressCode,然后用了一下router拦截器,很好用,当然也可以专门封装一个方法来实现(跳转的页面上带有addressCode),不过 ...

  10. 洛谷P3121 审查(黄金)Censoring(Gold) [USACO15FEB] AC自动机

    正解:AC自动机 解题报告: 传送门! 啊我好呆啊其实就挺模板题的,,,只是要一个栈搞一下,,,然后我就不会了,,,是看了题解才get的,,,QAQ 然后写下解法趴QwQ 首先看到多串匹配不难想到AC ...