• 视图与URL配置--Hello world


    使用Django,你会用不同的方法来说明这两件事:页面的内容是靠view function(视图函数)来产生,URL定义在URLconf中

    01 基于Django的第一个页面:Hello world

    明白一点:

    每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse 对象,或者抛出一个异常,比如 Http404 。至于你还想干些什么,随便你

    1.首先在建立的app目录下 (/func1/views.py) 打开views.py 文件,书写如下代码

    from django.shortcuts import HttpResponse
    
    def hello(request):
        return HttpResponse("Hello world")

    首先介绍第一个知识点:

    HttpResponse:将括号里面的内容以字符串传递给页面

    在这里就必须介绍另一个函数:render()

    载入模板,填充上下文,再返回由它生成的 HttpResponse 对象

    2.建立视图之后需要建立url 映射,使URL访问http://127.0.0.1:8000/hello/ 即调用hello函数返回hello world

    由于我们的视图函数在项目mysite里面应用func1下,即视图目录是:/mysite/func1/views.py。我们可以建立两种方法进行路由分配

    2.1第一种:直接在项目的urls.py文件下建立url映射,在/mysite/urls.py 代码如下

    from django.conf.urls import url
    from django.contrib import admin
    
    from func1 import views
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^hello/', views.hello),
    ]

    其中语句:from func1 import views 即从func1文件里导入views文件,当我们在url匹配到hello时,就会在views.py下找到对应的函数,其输出结果如下:


    2.2 第二种 进行路由分发

    :当使用原始的url 匹配时,我们的url都写在ulrs.py 文件里,当我们实际项目中不止一个应用app时会出现url在文件中累积或命名冲突,因此我们使用路由分发来解决。

    我们在应用目录func1下建立新的urls.py文件

    在项目目录(mysite)下的urls.py 书写代码如下

    from django.conf.urls import url,include
    from func1 import views
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^func1/', include('func1.urls')),
    ]

    在应用目录下(func1)的urls.py代码如下

    from django.conf.urls import url
    from func1 import views
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^hello/', views.hello),
    ]

    运行结果如下:


    注:运行过程说明,当我们在url中输入/func1/hello/ 时,首先匹配 func1/,通过include(func1.urls.py)将url匹配到func1/urls.py 文件中,再在文件中匹配函数 hello,输出结果Hello world,

    3.对函数url的说明

    def url(regex, view, kwargs=None, name=None):
        return re_path(regex, view, kwargs, name)

    其中url有四个参数:两个必须参数:regex 和 view,两个可选参数:kwargs 和 name

    regex:类似正则表达式,进行路由匹配

    view:调用特定的视图函数

    kwargs:任意个关键字参数可以作为一个字典传递给目标视图函数

    name:为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式

    4.于此类似的函数 path

    path() 参数: route
    route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
    
    这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。
    
    path() 参数: view
    当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。稍后,我们会给出一个例子。
    
    path() 参数: kwargs
    任意个关键字参数可以作为一个字典传递给目标视图函数。本教程中不会使用这一特性。
    
    path() 参数: name
    为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式

    举一个上面的例子:

    在项目的urls.py中书写以下代码

    from django.urls import path
    from func1 import views
    
    urlpatterns = [
        path('hello/', views.hello),
    ]

    运行代码如下:


    02 原理与过程

    1.原理

    当我们在浏览器中输入url是,Django所有的响应都基于settings.py。当你运行python manage.py runsrver,脚本将在于manage.py 同一个目录下查找名为settings.py的文件,这个文件包含了所有有关这个Django项目的配置信息,例如:项目更目录 BASE_DIR,注册app INSTALLED_APPS,中间件 MIDDLEWARE ,url目录 ROOT_URLCONF,模板 TEMPLATES,网关服务通信接口应用 WSGI_APPLICATION,数据库 DATABASES,静态文件目录 STATIC_URL,STATICFILES_DIRS等等

    2.url核心设置 ROOT_URLCONF

    此设置作为URLconf 告诉Django在这个站点中那些python的模块将被用到

    ROOT_URLCONF = 'mysite.urls'

    3.具体工作过程

    当访问url/hello/时,Django根据ROOT_URLCONF的设置装载URLCONF,然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的。当找到这个匹配的URLpatterns就调用相关联的view函数,并把HttpRequest对象作为第一个参数。一个视图功能必须返回一个HttpResponse。一旦做完,Django将完成剩余的转换python的对象到一个合适的带有HTTP头和body的Web Response


    03 总结

    1.进来请求 /hello/

    2.Django通过在ROOT_URLCONF配置来决定跟URLconf

    3.Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目

    4.如果找到匹配,将调用相应的视图函数

    5.视图函数返回一个HttpResponse(或者使用render()进行返回hmtl页面,但实质也是字符串)


    6.视图函数返回一个HttpResponse

    7.Django转换HttpResponse为一个合适的HTTP response,以Web page 显示出来








    f

    02 








  • 相关阅读:
    eclipse改变默认的编码格式(UTF-8)
    Guava学习:Joiner和Splitter工具(二)
    Guava中的Joiner和Splitter工具演示
    GitHub查找开源项目技巧分享
    java1.8特性之多重排序简单示例
    jedis工具类:java操作redis数据库
    SQL优化建议(mysql)
    Moodle插件之Filters(过滤器)
    Moodle插件开发系列——XMLDB编辑器
    Moodle插件开发——Blocks(版块)
  • 原文地址:https://www.cnblogs.com/LQ6H/p/10134008.html
Copyright © 2020-2023  润新知