python处理post表单&符号_Django之--POST方法处理表单请求

上一篇:Django之--MVC的Model 演示了如何使用GET方法处理表单请求,本文讲述直接在当前页面返回结果,并使用更常用的POST方法处理。

Post方法与get方法的区别网上有很多这里不再详述,相对来说POST更加安全和用途多样,get多用于不包含敏感信息的查询。

一、首先我们修改下page.html

{{ 标题 }}

{% for 商品 in 商品列表 %}

{{ 商品 }}

{% endfor %}

#修改为/product,方法修改为post,我们通过此url展示商品和查询结果

{% csrf_token %} #添加1

{{ 结果 }}

#添加2:这里预留一个结果显示行

{% csrf_token %}的标签:csrf 全称是 Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。

二、然后我们编写product.py文件:

from django.shortcuts import render

from django.views.decorators import csrf

from . import mysql

def page(request):

context={}

context['标题'] ='商品种类:'

pro_list=mysql.db_query("select distinct name from product")

context['商品列表']=[]

for i in range(0,len(pro_list)):

context['商品列表'].append(pro_list[i][0])

if request.POST:

pro=request.POST['q']

if not pro.strip():

context['结果'] = '搜索项不能为空'

else:

price_quan=mysql.db_query("select price,quantity from product where name='%s'"%(pro))

price=str(price_quan[0][0])

quantity=str(price_quan[0][1])

context['结果'] = '你搜索的商品为: ' + pro + '商品价格为:' + price + '商品余量为:' + quantity

return render(request,'page.html',context)

然后这里再贴一下上一篇GET方法的写法作对比:

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from django.shortcuts import render

# HttpResponse与render的区别在于,前者只用于返回文本信息,而render即其字面意思“渲染”,意思是使用context渲染html页面后返回。

from . import mysql

# 表单

def page(request):

context={}

context['标题'] ='商品种类:'

pro_list=mysql.db_query("select distinct name from product")

context['商品列表']=[]

for i in range(0,len(pro_list)):

context['商品列表'].append(pro_list[i][0])

return render(request,'page.html',context)

# 接收请求数据

def result(request):

request.encoding='utf-8'

pro=request.GET['q']

if not pro.strip():

message = '搜索项不能为空'

else:

price_quan=mysql.db_query("select price,quantity from product where name='%s'"%(pro))

price=str(price_quan[0][0])

quantity=str(price_quan[0][1])

message = '你搜索的商品为: ' + pro + '商品价格为:' + price + '商品余量为:' + quantity

return HttpResponse(message)

三、最后修改下urls.py

from django.conf.urls import url

from . import view,testdb,search,product

urlpatterns = [

url(r'^hello$', view.hello),

url(r'^product$', product.page),

]

最后的展示结果如下:

下面是一个简单的Django表单处理示例: 1. 定义表单类 ```python from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=100) email = forms.EmailField() message = forms.CharField(widget=forms.Textarea) ``` 2. 创建表单视图函数 ```python from django.shortcuts import render from .forms import ContactForm def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): name = form.cleaned_data['name'] email = form.cleaned_data['email'] message = form.cleaned_data['message'] # 处理表单数据 else: form = ContactForm() return render(request, 'contact.html', {'form': form}) ``` 3. 创建表单模板 ```html {% extends 'base.html' %} {% block content %} <h1>Contact Us</h1> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Send</button> </form> {% endblock %} ``` 在表单视图函数,我们首先检查请求方法是否为POST。如果是,则创建一个表单对象,并使用表单数据验证其有效性。如果表单数据有效,则从表单对象提取数据并处理它们。否则,我们将使用无效表单对象呈现表单模板。 在表单模板,我们使用Django的模板标记和过滤器来呈现表单。我们使用`form.as_p`过滤器将表单渲染为HTML段落。我们还使用`{% csrf_token %}`标记为表单添加CSRF令牌,以确保表单提交时不受到跨站点请求伪造攻击的影响。最后,我们在表单上添加一个提交按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值