第一个Django驱动的页面:hello world
2.1.1第一个视图
- 视图就是普通的python函数,第一个参数是HeepRequest对象,返回值是一个HttpResponse实例
- 在mysite目录中新建views.py空文件
- 里面内容如下
python
# -*- encoding: utf-8 -*-
from django.http import HttpResponse
# 从django.http模块中导入HttpResponse类
def hello(request):
return HttpResponse("Hello world")
2.1.2 第一个URL配置
-
urls.py配置如下
from django.contrib import admin
from django.urls import path
from mysite.views import hello
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', hello),
]
2.1.6 Django 处理请求的过程
- 运行
python manage.py runserver命令时,manage.py脚本在内层mysite目录中寻找名为settings.py的文件。这个文件中保存着当前Django项目的全部配置,- 其中最重要的是ROOT_URLCONF, 它告诉Django网站的URL配置
- 请求一个web请求的流程
- 请求/hello/
- Django查看ROOT_URLCONF设置,找到根URL配置
- Django比较URL配置中的各个URL模式,找到与/hello/匹配的那个
- 如果找到匹配的模式,调用对应的视图函数
- 视图函数返回一个HTTPResponse对象
- Django把HTTPResponse对象转换成正确的HTTP响应,得到网页
2.2 第二个视图:动态内容
-
刚才的hello world是静态的html,现在来个动态的
-
views.py
python
# -*- encoding: utf-8 -*-
from django.http import HttpResponse
# 从django.http模块中导入HttpResponse类
import datetime
def hello(request):
return HttpResponse("Hello world")
def current_datetime(request):
now = datetime.datetime.now()
html = "It is now %s. "%now
return HttpResponse(html)
urls.py
python
from django.contrib import admin
from django.urls import path
from mysite.views import hello, current_datetime
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', hello),
path('time/', current_datetime),
]
URL 配置和松耦合
- 在Django Web应用中,URL定义与所调用的视图函数之间是松耦合的,即某个功能使用哪个URL与视图函数的实现本身放在两个地方
第三个视图:动态URL
- 需求:通过/time/plus/22/ 等访问当前时间22个小时后的时间
views.py里面增加hours_ahead函数
python
def hours_ahead(request, offset):
'''
:param request:
:param offset: 是URL模式中那对圆括号捕获的字符串,注意捕获的是Unicode对象
:return:
'''
try:
offset = int(offset)
except ValueError:
raise Http404
dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
html = "In %s hour(s), it will be %s."%(offset, dt)
return HttpResponse(html)
-
urls.pyfrom django.contrib import admin
from django.urls import path, re_path
from mysite.views import hello, current_datetime, hours_ahead
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', hello),
path('time/', current_datetime),
re_path('time/plus/(\d{1,2})/$', hours_ahead),
]