前台用 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. 命令配置linux分辨率

    1. xrandr 使用该命令列举系统支持的分辨率 2. xrandr -s 回复原来的分辨率 3. xrandr -s 1360x768 设置分辨率   如果分辨率没能锁定,请在根目录使用gedit ...

  2. Windows环境下安装Linux

    怎样实现在现有的Windows系统上安装Linux,实现双系统启动

  3. C常用的字符串函数实现

    /** 查找字符串 source 中 是否有指定的子串出现,如果有返回第一个匹配的字符 @param source 源 @param chars 目标 @return 返回值 */ char *fin ...

  4. ORA-00054:resource busy and acquire with nowait specified解决方法

    1.用dba权限的用户查看数据库都有哪些锁 SELECT T2.USERNAME,T2.SID,T2.SERIAL#,T2.LOGON_TIME        FROM V$LOCKED_OBJECT ...

  5. ELKstack5.6.5

    ELKstack 安装: 一:环境准备: 1.给添加块磁盘50G,相当于模拟raid 2.分别给它们做本机的主机解析 [root@node01 ~ ]#cat  /etc/hosts 127.0.0. ...

  6. 【PyQt5-Qt Designer】在GUI中使用pyqtgraph绘图库

    pyqtgraph绘图库 1.1 简介: pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以 ...

  7. sql生成数据库的序列号

    -- ============================================= -- Author: <Author,yaoyao,Name> -- Create dat ...

  8. $(this) 和 this 关键字在 jquery 中有何不同?

    $(this) 返回一个 jQuery 对象,你可以对它调用多个 jQuery 方法,比如用 text() 获取文本,用 val() 获取值等等. 而 this 代表当前元素,它是 javascrip ...

  9. 【托业】【新托业TOEIC新题型真题】学习笔记10-题库七-P7

    1.to request a review of information 要求审查资料 2.inform of 将…告知(某人); 3.flammable [ˈflæməbl]adj.易燃的,可燃的; ...

  10. .NET Core 用 VS Code新建各种类型的项目

    用命令行找个地方, 建立目录, 然后执行一下dotnet new --help命令, 查看一下建项目的帮助: 那我建立一个不带用户验证的mvc项目: dotnet new mvc --auth Non ...