1 URL定义
URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL格式如下:
URL解释:
schema://host[:port#]/path/…/[?query-string][#anchor]
schema:指定使用的协议(例如:http, https, ftp)
host:Http服务器的IP地址或者域名
port:端口号,http默认是80端口
path:访问资源的路径
query-string:发送给http服务器的数据
anchor:锚点#
2 urls.py路由设置
在项目根目录下有urls.py和views.py,同时在每个app中也有相应的urls.py和views.py。
#项目生成命令:
django-admin startproject 项目名
#app生成命令
python manage.py startapp app名称
2.1 urls.py的作用
URL配置(URLconf)就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从配置文件中开始
2.2 导入响应模块
from django.urls import path,include,re_path
from . import views
path和views是必须导入,include是包含app路由用到,如果用到正则判断变量的时候导入re_path。
2.3 path的语法规则
path(route, view, kwargs=None, name=None)
-
route:字符串,url规则,为url路径部分内容
-
view:视图,在views里找到对应的视图函数,在网页上显示设计好的内容
-
kwargs:额外参数,为一个字典
-
name:url的命名
#项目urls.py中路由设置
urlpatterns = [
path('admin/', admin.site.urls), #此为系统测试主页
path('index/',views.index), #其中index/为url路径部分,views.test则指向views.py中index函数
path('teacher/',include('teacher.urls')), 将teacher/映射到teacherapp下的urls
]
#teacerapp中urls.py中路由设置
urlpatterns = [
path('index/',views.index,name = 'index'), #由于项目中映射的设置,teacher/index/指向了teacherapp中views.py中的index函数,由于name的设置,无论index/路径如何变化,比如需要修改成aaa/,路由中关于index并不需要改变(虽然url变了),仍然指向该view函数
]
#关于kwargs
path('detail/<int:id>/', views.detail), # url捕获参数
path('detail/', views.detail, kwargs={'id': 15}), # 额外参数传参
path('detail/<int:id>/', views.detail, kwargs={'id': 15}), # 当kwargs中key与url捕获中的key一致的话,以kwargs为准
3 views.py视图函数
3.1导入模块
from django.http import HttpResponse
from django.shortcuts import reverse,redirect,render
- HttpResponse在网页直接显示文本内容,类似于python中print的作用,用于调试
- reverse解析地址,用于debug调试
- redirect重定向,直接输入一个网址,进入该网址
- render渲染html模板文件,最重要的,第一个参数必须为request
3.2 模板函数示例
def index(request):
now = datetime.now()
now = now.strftime('%Y年%m月')
lt =[1,2,3]
dt ={'name':'tiger','age':18}
students= [
{'name':'tiger','age':18,'sex':'男'},
{'name':'cat','age':16,'sex':'女'},
{'name':'dog', 'age': 20, 'sex': '男'},
]
def func():
return '函数'
return render(request,'teacher/index.html',context={
'now': now,
'lt': lt,
'dt': dt,
'func': func,
'students':students,
})
def detail(request,name):
return HttpResponse(f'这是{name}同学的详情')
重点:
- 视图函数中可以定义变量,通过context参数使这些变量可以在html模板文件中通过{{变量}}的形式引用,同时这些变量可以被自定义标签通过take_context引用
- 视图函数可以设置参数如name,在设置参数数必须在路由设置中有对应的设置,可以用kwargs参数