编码员们好。
本页解释了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应用程序,向用户提供一个简单的页面。
$ 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中的请求对象带有一些有趣的属性,比如客户端的IP,浏览器(又称用户代理),请求路径,或者帮助我们检测连接是否安全的信息(HTTPS类型)。
如何在视图中检查请求类型。
一个广泛的用户代码块是当我们测试请求的类型和管理提交的数据时,在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 浏览器是用来更新服务器上的信息的,例如改变一本书的标题或在我们的服务中注册一个新项目。
GET 和POST 的另一个区别是提交信息的位置。
GET在URL中提交数据。http://myservice.com?search=all_booksPOST在请求正文中提交数据(在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为GET 和POST 请求提供了字典,其中填充了客户端发送的所有变量。我们可以通过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。更多资源,请访问。