Django——表单

虚幻大学 xuhss 226℃ 0评论

? 优质资源分享 ?

学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

一、前言

  看了下教程,以为表单很简单呢,结果搞了一两个钟才弄懂,哈哈哈,所以说不要小瞧每一件事。

  先说明下HTTP请求:

  HTTP协议以"请求-回复"的方式工作。客户发送请求时,可以在请求中附加数据。服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务。

  下面以输入框搜索为例,分别用get和post方法实战演练(还是基于DjangoTest项目演练),如下是效果图:

09a23bcd424c9c8e666253417644316f - Django——表单

二、GET请求

1、在TestModel/tests.py,新增接收用户请求的代码

from django.shortcuts import render
from django.test import TestCase

# Create your tests here.

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

'''例4:get请求'''
# 表单
def search\_get(request):
 return render(request, 'search\_get.html')

# 接收请求数据
def search(request):
 request.encoding = 'utf-8'
    if 'q' in request.GET and request.GET['q']:
 message = '你搜索的内容为: ' + request.GET['q']
 else:
 message = '你提交了空表单'
    return HttpResponse(message)

fe1e5caa79abfa248e3662e38505a6e8 - Django——表单

2、在templates目录新增search_get.html

1)form的action属性说明:action="/search/",表示表单提交给的url,此处即表示表单提交后提交到http://127.0.0.1:8000/search/?q=xxx

DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>表单搜索页-gettitle>
head>
<body>
<h3>GET请求搜索h3>

 <form action="/search/" method="get">
 <input type="text" name="q">
 <input type="submit" value="搜索">
 form>

body>
html>

a525d003b34a2f1d226b14fc5b5005a9 - Django——表单

3、修改DjangoTest/urls.py

1)path('get/',tests.search_get):即访问http://127.0.0.1:8000/get/,此时调用的是search_get函数(该函数处理的是指向打开search_get.html表单页)

2)path('search/',tests.search):这个是将路径指向http://127.0.0.1:8000/search,此时是调用search函数(该函数处理的是接收请求数据),此处要特别注意路径名需要对接search_get.html中tests.search函数所定义的action="search",所以这里的path必须是search

3)url访问说明:其实可以看下面的第4点,但我在这里还是再啰嗦一下比较好点

  • 访问http://127.0.0.1:8000/get/,打开表单页面
  • 搜索后由表单的action定义提交到http://127.0.0.1:8000/search,即相当于跳转到新页面了
  • get是将参数带到url中的,所以搜索后url为http://127.0.0.1:8000/search/?q=2

1849c5ae426cd7c66a86f8baad4baf37 - Django——表单

4、浏览器访问地址

1)访问http://127.0.0.1:8000/get/,加载的页面如下:

1d18b05655aef453ac288b641dda9d66 - Django——表单

2)输入框输入内容

3)点击搜索后,效果如下:

d32dce6de2a0d1c59ece2299e54c9630 - Django——表单

三、POST请求

  前面是用get方法,将视图显示和请求处理分成两个函数处理,然而提交数据时更常用 POST 方法,所以接下来演示用post方法并用一个URL和处理函数,同时显示视图和处理请求。

1、在TestModel/tests.py,新增search_post 函数来处理 POST 请求

  'rlt'是search_post.html表单的元素预留的位置值,用于接收搜索后的值

from django.shortcuts import render
from django.test import TestCase

# Create your tests here.

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

'''例3:post请求'''
def search\_post(request):
 ctx= {}
 if request.POST:
 ctx['rlt'] = request.POST['querry']
 return render(request,"search\_post.html",ctx)

94bfefb634371049b7f760979bdb3e03 - Django——表单

2、在templates目录新增search_post.html

1)在模板的末尾,我们增加一个 rlt 记号,为表格处理结果预留位置。

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

3)form的action属性说明:action="/post/",表示表单提交给的url,此处即表示表单提交后提交到http://127.0.0.1:8000/post/

DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>表单搜索页-posttitle>
head>
<body>
<h3>POST请求搜索h3>

 <form action="/post/" method="post">
 {% csrf\_token %}
 <input type="text" name="querry">
 <input type="submit" value="搜索">
 form>
 <p>{{ rlt }}p>
body>
html>

21163a6f15da7abbc9d2bd4acbd99bd5 - Django——表单

3、修改DjangoTest/urls.py

19ec7be8186f81ce504d577722ab741d - Django——表单

4、浏览器访问地址

1)访问http://127.0.0.1:8000/post/,加载的页面如下:

31637ab7d4c1bb45583f80469b5c6e93 - Django——表单

2)输入内容后,点击搜索,效果如下:

3561d1e5f211a08613698732904d88bf - Django——表单

转载请注明:xuhss » Django——表单

喜欢 (0)

您必须 登录 才能发表评论!