Django的请求对象 - 初学者教程

88 阅读2分钟

编码员们好。

本页解释了Django提供的请求对象作为视图中的默认参数。对于那些不熟悉Django的人来说,这个网络框架是由有经验的开发者用Python编写的,使用的是电池包含的概念。

谢谢你的阅读!- 内容由**App Generator**提供。

让我们创建一个Django项目,并对我们的第一个视图进行编码,其中请求对象被暴露。

创建并激活一个虚拟环境

$ # Linux-based systems
$ virtualenv env
$ source env/bin/activate  

对于基于Windows的系统,其语法略有不同。

$ virtualenv env
$ .\env\Scripts\activate

安装Django - 使用PIP(Python的官方软件包管理器)。

$ pip install django

如果有人更喜欢特定的Django版本,请使用这种语法。

$ pip install "django==2.2.10" # This will install 2.x version

建立一个Django项目

在Django中,可以通过使用django-admin轻松地生成一个新的项目,django-admin为数据库、Django和安全层提供了一系列的设置。

创建项目文件夹

$ mkdir my-django-project
$ cd my-django-project

在该目录内,我们将使用django-admin工具生成我们项目的核心。

$ django-admin startproject config .

设置数据库

$ python manage.py makemigrations # generate SQL
$ python manage.py migrate        # Apply changes on database   

在开发模式下启动应用程序

$ python manage.py runserver 
$
$ # Access the web app in browser: http://127.0.0.1:8000/

这时我们应该在浏览器中看到默认的Django页面。

Django Request Object - The default Django page.

创建新的应用程序

在上一节中,我们已经生成了处理配置的项目核心,现在我们将创建第一个Django应用程序,向用户提供一个简单的页面。

$ python manage.py startapp app

更新设置以包括新的应用程序 -config/settings.py

# File: config/settings.py (partial content)
...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app'                           # <-- NEW
]
...

更新路由 -config/urls.py

# File: config/urls.py (partial content)
...
from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url   # <-- NEW
from app.views import hello                 # <-- NEW

urlpatterns = [
    path('admin/', admin.site.urls),
    url('', hello),                         # <-- NEW
]

代码出第一条路由,并获得对request 对象的访问权

from django.shortcuts import render
from django.http import HttpResponse     # <-- NEW

def hello(request):                      # <-- NEW    
    return HttpResponse("Hello Django")  # <-- NEW   

Django Request Object - Simple Hello World served by the app.

请求对象属性

Django中的请求对象带有一些有趣的属性,比如客户端的IP,浏览器(又称用户代理),请求路径,或者帮助我们检测连接是否安全的信息(HTTPS类型)。

Django Request Object - Header variables

如何在视图中检查请求类型。

一个广泛的用户代码块是当我们测试请求的类型和管理提交的数据时,在POST (当我们发送信息到服务器,例如登录动作)。

from django.shortcuts import render
from django.http import HttpResponse     

def hello(request):

    if request.method == 'GET':    
        return HttpResponse("Received a GET request")

    elif request.method == 'POST':    
        return HttpResponse("Received a POST request")

对于新人来说,GET 是用来从服务器上提取信息而不改变任何东西。搜索是一个很好的例子,当我们试图在谷歌或维基百科上找到信息时,GET 请求。

POST 浏览器是用来更新服务器上的信息的,例如改变一本书的标题或在我们的服务中注册一个新项目。

GETPOST 的另一个区别是提交信息的位置。

  • GET 在URL中提交数据。http://myservice.com?search=all_books
  • POST 在请求正文中提交数据(在URL中不可见)。

列出所有的请求头文件

本小节包含一个代码样本,可以打印出Django提供的所有头信息和请求对象。

def headers(request): 
    values = request.META.items() 

    rows = ''
    for key, val in values:
        rows += '<tr><td>%s</td><td>%s</td></tr>' % (key, val)

    return HttpResponse( '<table>' + rows + '</table>' )

下面是使用本地开发服务器执行的脚本输出。

Django Request Object - Full dump of request variables.

读取请求变量

Django为GETPOST 请求提供了字典,其中填充了客户端发送的所有变量。我们可以通过key 或使用get() 帮助器来访问这两种情况下的变量。

读取GET变量

def parse_get(request):

    var1 = request.GET['my_var']       # this might throw KeyError exception

    var2 = request.GET.get('var_2')    # Soft read on variable

    var3 = request.GET.get('var_3', 1) # Soft Read with Default value     

对于POST,其过程是相同的。

def parse_post(request):

    post_var1 = request.POST['my_var']       # this might throw KeyError exception

    post_var2 = request.POST.get('var_2')    # Soft read on variable

    post_var3 = request.POST.get('var_3', 9) # Soft Read with Default value     

谢谢你的阅读!欢迎在评论区中提出AMA。更多资源,请访问。

  • 阅读更多关于Django的信息(官方文档)
  • 使用可开发的Django启动器快速启动一个新项目