美文网首页
Django笔记05-URL与视图

Django笔记05-URL与视图

作者: fbckf | 来源:发表于2018-07-25 16:54 被阅读0次

URL与视图

django 中将 url 规则和视图函数绑定在一起

URL

 url 是用户访问网站资源的地址,包含了模式协议和资源位置,这里主要看的是资源位置也就是第二部分。

 当用户在浏览器中输入地址 http://127.0.0.1:8000/ 时,就相当于告诉浏览器,使用协议是 http,访问的地址是 127.0.0.1 端口是 8000// 后面字符串就是资源位置部分

url 规则

 之前说过,django 自带了一个小型的服务器,当运行它后,就会在 ip 地址 127.0.0.18000 端口处监听,当用户访问 http://127.0.0.1:8000/admin/ 时,服务器就会接收到请求,之后 django 会把 url 前面 协议、域名(IP地址)和 端口部分去除留下 admin/ 部分,留下的这一部分字符串,会被拿到 django 项目中的 fbckf/urls.py 模块中与 urlpatterns 列表的 url 规则进行匹配。匹配到 url 规后,会执行与之绑定的视图函数处理请求。

 url 规则需要自己在 urls.py 模块中添加。之前写了一个 Hello world 的例子,已经在 fbckf/urls.py 中添加了相应的代码。

# fbckf/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

 首先指定博客首页的 url 为 http://127.0.0.1:8000/, 当在浏览器中访问时,前面部分会被去除,剩下的只有 “ ” 一个空字符,所以首页的 url 规则就是一个空字符。写成代码就是 path('', include('blog.urls'))。它的意思就是,当匹配到空字符后,调用 blog 应用下的 urls.py 模块继续匹配。

 因为一个网站不可能只有一个应用,所以不能把所有的 url 规则都放到这个项目总的 urls.py 模块中,这样可以避免混乱,方便后期维护。如何做? 只要在每一个应用下都建立自己 urls.py 模块,将各自的 url 规则写在其中,之后使用 include() 将其调用就好了。

# blog/urls.py
from django.urls import path
from . import views

app_name = 'blog'
urlpatterns = [
    path('', views.index, name='index'),
]

 需要注意三个点

  • app_name = 'blog' 表示这个模块是属于应用 blog 的,之后可以使用他调用这个模块下的 url 规则

  • views.index 表示将 views.py 模块下的 index() 函数与当前 url 规则绑定,当匹配到这个 url 规则后,就会调用该视图函数处理请求。

  • name='index' 表示这个 url 规则的名字为 index,也是之后调用该规则是使用的

 添加完成 url 规则后,需要添加绑定的视图函数 index()

视图函数

 视图(views)负责存取模型,以及将数据传递给模板。

    #在blog/views.py中编写视图函数
    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("Hello world!")

 这是之前写的 Hello workd 例子,其中,index() 函数需要接收一个 request 参数,这个参数就是 django 封装好的 http 请求。之后,这个函数会返回一个 HttpResponse 实例,在结果页面中显示 "Hello world!"。

 打开浏览器,输入首页地址 http://127.0.0.1:8000/,就可以看到结果。

总结

 django 中大部分逻辑都是视图函数中完成的,它决定了哪些数据会展示给用户,而模板则是决定如何展示数据。

相关文章

网友评论

      本文标题:Django笔记05-URL与视图

      本文链接:https://www.haomeiwen.com/subject/acfmmftx.html