如何使用Django高效处理HTTP请求?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1940个文字,预计阅读时间需要8分钟。
00-Django | 02-处理HTTP请求Python Django Django 处理 HTTP 请求 Hello 视图函数我们先以一个最简单的 Hello World 为例来看看 Django 处理请求的机制。绑定 URL 与视图函数 当用户访问 'Hello' 时,Django 会调用相应的视图函数。
00-django | 02-处理HTTP请求
python Django欢迎访问我的博客首页!
使用 django 模板系统
写好处理 HTTP 请求和返回 HTTP 响应的视图函数,然后把视图函数绑定到相应的 URL 上。 这就是Django处理HTTP的流程。
但我们不能每次都把大段的内容传给HttpResponse。django 对这个问题给我们提供了一个很好的解决方案,叫做模板系统。django 要我们把大段的文本写到一个文件里,然后 django 自己会去读取这个文件,再把读取到的内容传给HttpResponse。
添加模板
首先在我们的项目根目录(即 manage.py 文件所在目录)下建立一个名为templates的文件夹,用来存放我们的模板。然后在templates\ 目录下建立一个名为 blog 的文件夹,用来存放和 blog 应用相关的模板。在 templates\blog 目录下建立一个名为 index.html 的文件,此时你的目录结构应该是这样的:
. ├── Pipfile ├── Pipfile.lock ├── blog ├── db.sqlite3 ├── firstblog ├── manage.py └── templates └── blog └── index.html
在index.html中写入:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{ title }}</title> </head> <body> <h1>{{ welcome }}</h1> </body> </html>
用 {{ }} 包起来的变量叫做模板变量。django 在渲染这个模板的时候会根据我们传递给模板的变量替换掉这些变量。最终在模板中显示的将会是我们传递的值。
模板写好了,还得告诉 django 去哪里找模板,在 settings.py 文件里设置一下模板文件所在的路径。在 settings.py 找到TEMPLATES选项,它的内容是这样的:
TEMPLATES = [ { ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)], #修改成这样 ‘APP_DIRS‘: True, ‘OPTIONS‘: {
其中DIRS就是设置模板的路径,在[]中写入os.path.join(BASE_DIR, ‘templates‘)
这里BASE_DIR是 settings.py 在配置开头有定义,记录的是工程根目录 查找路径。在这个目录下有模板文件所在的目录 templates\,于是利用os.path.join把这两个路径连起来,构成完整的模板路径,django 就知道去这个路径下面找我们的模板了。视图函数view.py可以改成下面这样:
from django.shortcuts import render def index(request): return render(request, ‘blog/index.html‘, context={ ‘title‘: ‘我的博客首页‘, ‘welcome‘: ‘欢迎访问我的博客首页‘ })
调用 django 提供的render函数。这个函数根据我们传入的参数来构造HttpResponse。我们首先把 HTTP 请求(request)传了进去,然后render根据第二个参数的值 blog/index.html 找到这个模板文件并读取模板中的内容。之后render根据我们传入的context参数的值把模板中的变量替换为我们传递的变量的值,{{ title }}被替换成了context字典中title对应的值,同理{{ welcome }}也被替换成相应的值。最终,我们的 HTML 模板中的内容字符串被传递给HttpResponse对象并返回给浏览器(django 在render函数里隐式地帮我们完成了这个过程),这样用户的浏览器上便显示出了我们写的 HTML 模板的内容了。
References
[1]HelloGitHub-Team 仓库:github.com/HelloGitHub-Team/HelloDjango-blog-tutorial
mp.weixin.qq.com/s/A9RHHm6wRDsMzbMU9oShyQ
本文共计1940个文字,预计阅读时间需要8分钟。
00-Django | 02-处理HTTP请求Python Django Django 处理 HTTP 请求 Hello 视图函数我们先以一个最简单的 Hello World 为例来看看 Django 处理请求的机制。绑定 URL 与视图函数 当用户访问 'Hello' 时,Django 会调用相应的视图函数。
00-django | 02-处理HTTP请求
python Django欢迎访问我的博客首页!
使用 django 模板系统
写好处理 HTTP 请求和返回 HTTP 响应的视图函数,然后把视图函数绑定到相应的 URL 上。 这就是Django处理HTTP的流程。
但我们不能每次都把大段的内容传给HttpResponse。django 对这个问题给我们提供了一个很好的解决方案,叫做模板系统。django 要我们把大段的文本写到一个文件里,然后 django 自己会去读取这个文件,再把读取到的内容传给HttpResponse。
添加模板
首先在我们的项目根目录(即 manage.py 文件所在目录)下建立一个名为templates的文件夹,用来存放我们的模板。然后在templates\ 目录下建立一个名为 blog 的文件夹,用来存放和 blog 应用相关的模板。在 templates\blog 目录下建立一个名为 index.html 的文件,此时你的目录结构应该是这样的:
. ├── Pipfile ├── Pipfile.lock ├── blog ├── db.sqlite3 ├── firstblog ├── manage.py └── templates └── blog └── index.html
在index.html中写入:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{ title }}</title> </head> <body> <h1>{{ welcome }}</h1> </body> </html>
用 {{ }} 包起来的变量叫做模板变量。django 在渲染这个模板的时候会根据我们传递给模板的变量替换掉这些变量。最终在模板中显示的将会是我们传递的值。
模板写好了,还得告诉 django 去哪里找模板,在 settings.py 文件里设置一下模板文件所在的路径。在 settings.py 找到TEMPLATES选项,它的内容是这样的:
TEMPLATES = [ { ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)], #修改成这样 ‘APP_DIRS‘: True, ‘OPTIONS‘: {
其中DIRS就是设置模板的路径,在[]中写入os.path.join(BASE_DIR, ‘templates‘)
这里BASE_DIR是 settings.py 在配置开头有定义,记录的是工程根目录 查找路径。在这个目录下有模板文件所在的目录 templates\,于是利用os.path.join把这两个路径连起来,构成完整的模板路径,django 就知道去这个路径下面找我们的模板了。视图函数view.py可以改成下面这样:
from django.shortcuts import render def index(request): return render(request, ‘blog/index.html‘, context={ ‘title‘: ‘我的博客首页‘, ‘welcome‘: ‘欢迎访问我的博客首页‘ })
调用 django 提供的render函数。这个函数根据我们传入的参数来构造HttpResponse。我们首先把 HTTP 请求(request)传了进去,然后render根据第二个参数的值 blog/index.html 找到这个模板文件并读取模板中的内容。之后render根据我们传入的context参数的值把模板中的变量替换为我们传递的变量的值,{{ title }}被替换成了context字典中title对应的值,同理{{ welcome }}也被替换成相应的值。最终,我们的 HTML 模板中的内容字符串被传递给HttpResponse对象并返回给浏览器(django 在render函数里隐式地帮我们完成了这个过程),这样用户的浏览器上便显示出了我们写的 HTML 模板的内容了。
References
[1]HelloGitHub-Team 仓库:github.com/HelloGitHub-Team/HelloDjango-blog-tutorial
mp.weixin.qq.com/s/A9RHHm6wRDsMzbMU9oShyQ

