视图与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 








原文地址:https://www.cnblogs.com/LQ6H/p/10134008.html