Django视图和URL配置(基础篇)

  使用Django,你会用不同的方法来说明这两件事 页面的内容是靠view function(视图函数) 来产生,URL定义在 URLconf 中。首先,我们先写一个Hello World视图函数。

  python3.6 + django 2.2.2

1. 第一份视图

创建views.py

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello World")
View Code

代码说明:

  • 首先,我们从 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中。

from django.conf.urls.defaults import *
from spider.views import hello
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.hello),
    path('hello/', views.hello),
]
View Code

代码说明:

  • 首先,我们从模块 (在 Python 的 import 语法中, spider/views.py 转译为 spider.views ) 中引入了 hello视图。 (这假设spider/views.py在你的Python搜索路径上。关于搜索路径的解释,请参照下文。)

  • 接下来,我们为urlpatterns加上一行: path(‘hello/’, views.hello), 这行被称作URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。

3. 动态内容

  让Django视图显示当前日期和时间。

  spider/views.py的代码如下:

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})
View Code

  代码说明:current_datetime 视图函数显示当前时间。hours_ahead根据输入的值计算要显示的时间,这里做了容错处理,如果输入的非整型则返回一个404给用户。

  templates/current_datetime.html 的代码如下:

# 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 %}
View Code

  templates/hours_head.html 的代码如下:

{% extends "base.html" %}

{% block title %}Future time{% endblock %}

{% block content %}
<p>In {{ hour_offset }} hour(s), it will be {{ next_time }}.</p>
{% endblock %}
View Code

   urls.py函数代码如下:

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),
]
View Code

  代码说明: 导入视图views.py对应的视图函数,定义了两个url显示时间和日期并对应匹配到各个视图函数。

posted on 2019-07-04 18:00  blackysy  阅读(114)  评论(0编辑  收藏  举报

导航