URL - 结构
- 定义 - 即统一资源定位符Uniform Resource Locator
- 作用 - 用来表示互联网上某个资源的地址
- URL的一般语法格式为 (注:[]代表其中的内容可省略)
- protocol://hostname[:port]/path[?query][#fragment]
- query一般是查询字符串。#fragment就是锚点,帮我们快速定位到当前网页的某一个标签栏
- http://tts.tmooc.cn/video/showVideo?menuId=657421&version=AID999#subject
- protocol(协议) http://
- http 通过HTTP访问该资源。格式 http://
- https 通过安全的HTTPS访问该资源。格式 https://
- file 资源是本地计算机上的文件。格式:file:///
- hostname (主机名) tts.tmooc.cn
- 是指存放资源的服务器的域名系统(DNS)主机名、域名 或 IP地址
- port (端口号) :80
- 整数,可选,省略时使用方案的默认端口
- 各种传输协议都有默认的端口号,如http的默认端口为80
- path (路由地址) video/showVideo
- 由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。路由地址决定了服务器端如何处理这个请求。
- query (查询) ?menuId=657421&version=AID999
- 可选,用于给动态网页传递参数,可有多个参数,用"&"符号隔开。
- fragment(信息片段) #subject
- 字符串,用于指定网络资源中的片段。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。
Django如何处理URL的请求
浏览器 地址栏 --> http://127.0.0.1:8000/page/2003
- Django从配置文件中根据ROOT_URLCONF找到 主路由文件;默认情况下,该文件在 项目同名目录下的urls;例如 Project01/Project01/urls.py
- Django加载 主路由文件中的urlpatterns变量[包含很多路由的数组]
- 依次匹配 urlpatterns中的path,匹配到第一个合适的,中断后续匹配
- 匹配成功 - 调用对应的视图函数处理请求,返回响应
- 匹配失败 - 返回404响应
主路由 - urls.py
from django.urls import path from . import views urlpatterns = [ path('admin/',admin.site.urls) # http://127.0.0.1:8000/page/2003/ path('page/2003/',views.page_2003_view), ]
视图函数
- 视图函数是用于接收一个浏览器请求(HttpRequest对象)并通过HttpRespon象返回响应的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容给浏览器。
- 语法
def xxx_view(request[,其他参数...]): return HttpResponse对象
样例
# file: <项目同名文件夹下>/views.py # 一般视图文件就写在上述views.py中。视图名字随意,此处为page1_view from django.http import HttpResponse def page1_view(request): html = '<h1>这是第一个页面</h1>' return HttpResponse(html)
由于此处与02节创建方式不同,此处按照这节的内容重新创建
首先,随便打开一个项目,然后在pycharm界面的左下角有Terminal终端的图标,点开。
cd返回根目录: cd D:\python_study 或者 cd..
进入目录后,输入: django-admin startproject Project02 回车 创建项目
然后file->open->打开目录下的Project02文件
对Project02进行配置
输入 python manage.py runserver 启动服务
当前目录结构为
在Project02中新建文件views.py
# 在urls.py文件中 from django.contrib import admin from django.urls import path # 将视图函数与路由绑定,即把视图函数放到path的第二个参数位置上,传进去即可。 from . import views urlpatterns = [ path('admin/', admin.site.urls), # http://127.0.0.1:8000/page/2003/ path('page/2003/',views.page_2003_view), # page_2003_view不要加(),不然引入的就是它的结果,而不是这个函数 ]
# 在views.py文件中 from django.http import HttpResponse # page_2003_view是视图名,与urls.py的path的第二个参数对应 def page_2003_view(request): html = '<h1>这是第一个页面</h1>' return HttpResponse(html)