zoukankan      html  css  js  c++  java
  • Django:视图views(一)

    1、环境搭建

    django中,视图负责与web请求进行交互

    视图本质上是一个Python函数,定义在booktest/views.py。通过django1/urls.py路由到该视图中。

    首先经过创建工程-命令行进入django3-配置数据库-创建数据库django3-创建应用-把booktest应用写入setting文件,下面开始配置路由:

    booktest/views.py

    from django.shortcuts import render
    from django.http import HttpResponse
    
    # Create your views here.
    def index(request):
        print('view hello')           #在命令行里输出
        return HttpResponse('haha')   #在浏览器输出

    booktest目录下创建urls.py

    booktest/urls.py

    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url('^$',views.index)
    ]

    在最外层的urls.py中引入子urls路由

    django3/urls.py

    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url('', include('booktest.urls'))
    ]

    启动服务器。在浏览器端输入 http://127.0.0.1:8080/booktest

    可以看到

    总体的路由如下:(settings.py入口)

     2、路由的过程

    当我们在URL中写入的时候

    首先,解析器会把前面的协议、地址、端口号全部去掉。只剩下booktest一段。

    进行匹配,与settings.py中的ROOT_URLCONF变量所对应的值进行匹配

    对应django3/urls.py

    显示了待匹配的url模板。这里指示如果待匹配的内容有”admin/”的话,使用admin.site.urls

    另外如果待匹配的内容有”booktest/”,使用booktest.urls。对应booktest/urls.py

     

    进入了booktest/urls.py还有urlpatterns待匹配。这里匹配的是“booktest/”后面的内容

    因为待匹配的是^$,空字符串。所以实际上booktest后面为空,才能匹配上。

    如果加上一句话

    urlpatterns = [
        url('^$',views.index), # 路由到views.py中的index()函数
        url('^index', views.index)
    ]

    表示可以匹配booktest/”或“booktest/index”。无论是哪个匹配上,都跳转到views.py中的index()函数。

    要从url中捕获一个值。需要在该值的周围添加一个小括号。并在视图函数中,通过后续的参数进行捕获。比如:

    booktest/urls.py

    urlpatterns = [
        url('^$',views.index), # 路由到views.py中的index()函数
        url('^index', views.index),
        url('^(d+)$', views.integer)
    ]

    booktest/views.py

    def integer(request, id):
        return HttpResponse('integer:%s' % id)

    3、命名参数

    在URL_PATTERNS中给要捕获参数指定变量名。在视图中通过对应的变量名捕获参数。

    假设要访问  http://127.0.0.1:8080/booktest/9/14/2018  的时候,能够捕获到年月日。

    booktest/urls.py

    urlpatterns = [
        url('^$',views.index), # 路由到views.py中的index()函数
        url('^index', views.index),
        url('^(d+)$', views.integer),
        url('^(?P<p2>d+)/(?P<p3>d+)/(?P<p1>d+)$', views.date),
    ]

    booktest/views.py

    def date(request, p1, p2, p3):
        return HttpResponse('year: %s, month: %s, date:%s' % (p1, p2, p3))

     

    4、命名空间和名称

    include函数可以添加第二个参数,namspace,表示命名空间

    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url('booktest/', include('booktest.urls', namespace='booktest'))  # 路由到booktest/urls.py
    ]

    url函数可以添加第三个参数,name。表示名称

    urlpatterns = [
        url('^$',views.index), # 路由到views.py中的index()函数
        url('^index', views.index, name="index"),
    ]

    使用namspacename可以在模板中去除关于urlconf的冗余信息。

    参考前面的例子

    templates/booktest/hero.html

    <body>
    <ul>
    {%for book in bookList %}
    <li><a href="{%url 'booktest:human' book.id %}">{{book.btitle}}</a></li>
    {%endfor%}
    </ul>
    </body>

    这样即使修改了url中的路径,也不需要同时修改模板中的代码了。

    5、404视图

    当访问一个不存在的网页 http://127.0.0.1:8080/booktest/xxx 的时候,浏览器会显示

    这个是django内部定义的一个404的视图。当网页找不到的时候,就会自动跳转到该视图中。

    下面可以尝试修改这个404视图。templates目录下创建一个文件404.html

    templates/404.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <h1>这里什么东西都没有!!</h1>
    </body>
    </html>

    在配置文件中把模板的路径加上

    django3/settings.py

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]

    关闭调试信息。并允许所有主机都可以访问该网站

    DEBUG = False
    
    ALLOWED_HOSTS = ['*',]

     

    6、500视图

    500是指服务器错误。

    当服务器的代码出现运行时的bug的时候,会显示500错误

    templates目录下创建500.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <h1>服务器内部出现错误!!</h1>
    </body>
    </html>

    在视图的代码中随便加点错误

    booktest/views.py

    def index(request):
        print('hello')
        花洒打机佬咖啡馆哈快点江老师更好看了解导师
        return HttpResponse('hello')

    为了后面的代码调试方便,还是要把调试功能打开

    DEBUG = True
    
    ALLOWED_HOSTS = []
  • 相关阅读:
    AddParent
    AddChild
    贝塞尔曲线代码
    顶点纹理shader
    抽象方法与抽象类
    Application类
    布局组件
    C#单例和Unity单例
    Unity&UGUI
    Json解析
  • 原文地址:https://www.cnblogs.com/kumata/p/9672255.html
Copyright © 2011-2022 走看看