1、Django的反向解析
1、反向解析
定义: 再urls.py文件中的路由设置中,path()和re_path()两个方法的name属性可以对前面的路径设置别名,而反向解析即是将其他地方中的别名重新解析为url路径
2、创建反向解析的步骤:
- 路径(urls.py文件中):url(‘路径’,视图函数,name=“别名”)
- 在模板语法中如果是静态路径,反向解析的语法为:
{% url '别名' %}
;而如果是动态路径,则基本语法变为{% url '别名' 动态参数 %}
,即将动态参数的值传入反向解析式,在这个里面。 - 在视图函数里如果是静态路径,反向解析的语法为
reverse('别名')
;如果是动态路径,则基本语法变为reverse('别名',args=(参数1,参数2,参数3))
3、实例:
- 在urls.py文件中,添加如下代码
from app01 import views #导入views文件
urlpatterns = [
path('admin/', admin.site.urls),
path('books/look/',views.books,name='books'), #在本例中需要添加的代码
]
- 在views.py文件中,创建视图函数,代码如下:
# 创建一个视图函数,其重定向到该路径
def delete(request,delete_book_id):
Book.objects.filter(nid=delete_book_id).delete()#查到主键为delete_book_id的记录,并用".delete()"方法删除此条记录
return redirect(reverse('books')) #反向解析,将“books”解析为url
- 在html类型文件中,如果需要添加该路径,
<form action="{{ url 'name' }}" methon="post">
表单体
</form>
2、Django的路由分发
Django路由分发要用到的方法就是include()
1、整个项目的路由分发都要放在urls.py文件中
2、基本语法: 假设有一个项目,其中有两个两个应用,应用名字分别为app01和app02;其具体的语法为:
from django.conf.urls import url,include
urlpatterns = [
path('app01/',include('app01.urls'))#(表示以app01开头的全部引入app01文件夹中的urls中去)此时,访问的路径将会改变,所有的路径均需以app01开头,而不能向以前一样直接以路径开头
]
3、在老的Django版本中,想要仅以ip地址而不加任何文件名访问首页,需要使用正则限制其以空开头以空结尾才可("^$")
;而新版本中的Django直接设置("")
即可
3、views.py文件中视图函数的request对象
request对象常用的参数及方法有:
- request.method:请求方式(GET/POST)
- request.path:请求路径
- request.POST:POST请求的数据,将POST的请求数据保存在一个字典中
- request.GET:GET请求的数据
- request.META:请求头
- request.get_full_path():不仅可以拿到请求路径,还可以拿到请求路径中的参数部分
- request.is_ajax():bool值,判断请求是否是由ajax发的
- HttpResponse(“str”)
4、Django中的重定向与转发语法
1、重定向语法:render(request,'要转发的页面文件名字',要传入页面的变量[以字典形式传送模板语言需要的对象])
实例: render(request,'book_view.html',{'book_list':book_list})
;表示转发book_view.html语句,并将视图函数中的book_list对象传入book_view.html页面,在传入之后就可用模板语法对页面进行渲染,这个后面会讲。