Django视图和URL配置(基础篇)
使用Django,你会用不同的方法来说明这两件事 页面的内容是靠view function(视图函数) 来产生,URL定义在 URLconf 中。首先,我们先写一个Hello World视图函数。
python3.6 + django 2.2.2
1. 第一份视图
创建views.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from django.http import HttpResponse def hello(request): return HttpResponse("Hello World")
代码说明:
- 首先,我们从 django.http 模块导入(import) HttpResponse 类。
- 接下来,我们定义一个叫做hello 的视图函数。每个视图函数至少要有一个参数,通常被叫作request。 这是一个触发这个视图、包含当前Web请求信息的对象,是类django.http.HttpRequest的一个实例。在这个示例中,我们虽然不用request做任何事情,然而它仍必须是这个视图的第一个参数。
2. 第一个URLconf
URLconf 就像是 Django 所支撑网站的目录。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from django.conf.urls.defaults import * from spider.views import hello urlpatterns = [ path('admin/', admin.site.urls), path('', views.hello), path('hello/', views.hello), ]
代码说明:
-
首先,我们从模块 (在 Python 的 import 语法中, spider/views.py 转译为 spider.views ) 中引入了 hello视图。 (这假设spider/views.py在你的Python搜索路径上。关于搜索路径的解释,请参照下文。)
-
接下来,我们为urlpatterns加上一行: path(‘hello/’, views.hello), 这行被称作URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。
3. 动态内容
让Django视图显示当前日期和时间。
spider/views.py的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def current_datetime(request): now = datetime.datetime.now() return render_to_response('current_datetime.html', {'current_date': now}) def hours_ahead(request, offset): try: offset = int(offset) except ValueError: raise Http404() dt = datetime.datetime.now() + datetime.timedelta(hours=offset) return render_to_response('hours_ahead.html', {'hour_offset': offset, 'next_time': dt})
代码说明:current_datetime 视图函数显示当前时间。hours_ahead根据输入的值计算要显示的时间,这里做了容错处理,如果输入的非整型则返回一个404给用户。
templates/current_datetime.html 的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# base.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> </head> <body> <h1>My helpful timestamp site</h1> {% block content %}{% endblock %} {% block footer %} <hr> <p>Thanks for visiting my site.</p> {% endblock %} </body> </html> # current_datetime.html {% extends "base.html" %} {% block title %}The current time{% endblock %} {% block content %} <p>It is now {{ current_date }}.</p> {% endblock %}
templates/hours_head.html 的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
{% extends "base.html" %} {% block title %}Future time{% endblock %} {% block content %} <p>In {{ hour_offset }} hour(s), it will be {{ next_time }}.</p> {% endblock %}
urls.py函数代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from django.contrib import admin from django.urls import path from spider import views from books import views as bk from contact import views as ct urlpatterns = [ path('admin/', admin.site.urls), path('', views.hello), path('hello/', views.hello), path('time/', views.current_datetime), path('time/plus/<offset>/', views.hours_ahead), ]
代码说明: 导入视图views.py对应的视图函数,定义了两个url显示时间和日期并对应匹配到各个视图函数。