如何新建app
在项目的根目录
python manage.py startapp app名字
URL概念:
URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它
urls.py的作用:
http://127.0.0.1:8000/hello/
URL解释:
schema://host[:port#]/path/…/[?query-string][#anchor]
schema:指定使用的协议(例如:http, https, ftp)
host:Http服务器的IP地址或者域名
port:端口号,http默认是80端口
path:访问资源的路径
query-string:发送给http服务器的数据
anchor:锚点
原理
当一个请求来到时
- 首先到项目目录下的urls.py (根URLconf模块)中,查找路由规则
- 根URLconf模块,里面定义了 urlpatterns 变量
- urlpatterns 是一个(django.urls.path,django.urls.re_path 对象)列表
- 按顺序运行每个url模式,在第一个匹配的模式停止
- 一旦匹配,django导入并调用给定的视图
- 如果中间出错,或者没有匹配到,返回404
path的参数
- path(route, view, kwargs=None, name=None)
- route 是一个字符串的url规则
- view 是个视图
- kwargs 额外参数,传递给view,
必须是一个字典
- name url的命名
转换器的使用:
re_path正则匹配
re_path('^hello/$',views.test5),
re_path('^hello/(?P<yy>[0-9]+)/',views.test6),
def test5(request):
return HttpResponse('这是用的re_path设置的')
def test6(request,yy):
print(yy,type(yy))
return HttpResponse('hello %s'%yy)
演练:
在student的app下的urls.py
student.view.py
ip+端口+app+url匹配模式
一个url对应一个视图函数,但我们的视图越来越多时,url也就越来越多
一个project有一个总的urls.py
各个app也可以自己建立自己的urls.py
用include()函数在project的urls.py文件进行注册
url命名
name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。
模板系统
模板放在哪???
1.在主目录下创建一个templates目录用来存放所有的html的模板文件.
2.templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件.
render方法是django封装好用来渲染模板的方法
很方便,很好用!!!
总结
-
在url中捕获参数
在url规则中使用<变量名>
可以捕获url中的值
传递给视图
** 捕获的值是 字符串 -
路径转换器
上面案例:int:pk
常用的装换器:
- str 匹配除了‘/'路径分隔符之外的所有字符串
- int 匹配任意整数
- slug 匹配任意ascii字符 加上连字符和下划线
- uuid 格式化id
- path 匹配任意非空字符 -
使用正则表达式 re_path(route, view, kwargs=None, name=None)
-
django 搜索 url 搜索的是什么?
只搜索路径部分,跟参数,以及请求方法(get,post)无关同一个url 可以匹配 get, post
-
包含其他URLconfs
include -
传递额外参数
path,re_path 方法中,传递一个kwargs 的字典参数***** 当kwargs 中的key 与 url捕获中的key 一致的时候,以kwargs为准
-
url 命名
页面重定向 ,跳转页面 登录之后, 某个操作之后 -
app_name
定义在 app文件夹下的urlconf模块中
app_name = app名称
- 模板系统
html 源码写到模板文件中
- 渲染
-
tp = get_template(‘teacher/index.html’)
html = tp.render()
return HttpResponse(html) -
快捷方式 推荐使用
return render(request, ‘teacher/index.html’)
-