Django基础入门06

笔记参考Django菜鸟教程

Day06 Django表单

  HTML表单是网站交互性的经典方式。

  本次内容学习Django如何对用户提交的表单数据进行处理。

1.     HTTP请求     

HTTP协议以“请求-回复”的方式工作

2.     GET方法

在模板目录templates中添加search_form.html表单:

<!DOCTYPE html>

<html>

<head>

<meta charset=”utf-8”>

</head>

<body>

        <formaction=”/search”  method=”get”>

          <inputtype=”text”  name=”q”>

          <inputtype=”submit” value=”搜索”>

</form>

</body>

</html>

我们在之前的项目中创建一个search.py文件,用于接收用户的请求:

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

from django.http import HttpResponse

from django.shortcuts import render_to_response

#表单

def search_form(request):

    returnrender_to_respoonse(‘search_form.html’)

#接受请求数据

def search(request):

        request.enconding=’utf-8’

     if ‘q’ inrequest.GET:

               message=’你搜索的内容为:’+request.GET[‘q’]

     else:

               message=你提交了空表单’

     return HttpResponse(message)

修改urls.py如下:

from django.conf urls import url

from .import view,testdb,search

 urlpatterns=[

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

url(r’^testdb$’,testdb.testdb),

url(r’^search-form$’,search.search-form),

 url(r’^search$’, search.search),

]

访问地址 http://127.0.0.1:8000/search-form 并搜索,结果如下所示



3.post方法

上面我们使用的是GET方法。视图显示和请求处理分成两个函数处理。

提交数据的时候更常用的是POST方法。

接下来我们使用该方法,并用一个URL和处理函数,同时显示视图和处理请求。

我们在tmplate中创建post.html,代码如下

<!DOCTYPEhtml>

<html>

<head>

<metacharset="utf-8">

<title>菜鸟教程(runoob.com)</title>

</head>

<body>

    <form action="/search-post"method="post">

        {% csrf_token %} 

 < !—这是Django提供的防止伪装提交请求的功能POST 方法提交的表格,必须有此标签 -->

        <input type="text"name="q">

        <input type="submit"value="Submit">

    </form>

    <p>{{ rlt }}</p>  <!--为表格处理结果预留位置-->

</body>

</html>

接下来我们在HelloWorld目录下新建search2.py文件并使用search_post函数处理POST请求。代码如下:

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

fromdjango.shortcuts import render

fromdjango.views.decorators import csrf

 # 接收POST请求数据

defsearch_post(request):

    ctx ={}

    if request.POST:

        ctx['rlt'] = request.POST['q']

    return render(request,"post.html", ctx)

接下来修改urls.py如下

fromdjango.conf.urls import url

from .import view,testdb,search,search2

 urlpatterns = [

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

    url(r'^testdb$', testdb.testdb),

    url(r'^search-form$', search.search_form),

    url(r'^search$', search.search),

    url(r'^search-post$', search2.search_post),

]

然后访问http://127.0.0.1:8000/search-post显示如下结果:


4.Request对象

每个view函数的第一个参数是HttpRequest对象,就像下边这个hello( ) 函数:

from django.http import HttpResponse

 def hello(request):

    return HttpResponse("Hello world")
 

HttpRequest对象包含当前请求URL的一些信息:

    path:请求页面的全路径,不包含域名,例如。“/hello/”

    method:请求中使用的HTTP方法的字符串表示。

    GET:包含所有HTTP GET参数的类字典对象。

    POST:包含所有HTTPPOST参数的类字典对象。

    REQUEST:POST和GET属性的集合,一般不使用。

    COOKIES:包含所有cookies的标准Python字典对象。

    FIELS:包含所有上传文件的类字典对象。

    META:包含所有可用HTTP头部信息的字典。

    user:是一个django.contrib.auth.models.User对象,代表当前登录的用户。

    session:唯一可读写的属性,代表当前会话的字典对象。

    raw_post_data:原始HTTPPOST数据,未解析过。

    Request对象也有一些有用的方法:

    _getitem_(key):返回GET/POST的键值,先取POST后取GET,如果键不存在抛出 KeyError。

    has_key() :检查request.GETor request.POST中是否包含参数指定的Key。   

    get_full_path():返回包含查询字符串的请求路径。

    is_secure():如果请求是安全的,返回True,就是说,发出的是HTTPS请求。

4.QueryDict对象

在HttpRequest对象中,GET和POST属性是django.http.QueryDict类的实例。

QueryDict类似字典的自定义类,用来处理单键对应多值的情况。

QueryDict实现所有标准的词典方法。还包括一些特有的方法:参照

http://www.runoob.com/django/django-form.html


    





猜你喜欢

转载自blog.csdn.net/xs_211314/article/details/79804244