django

djangoday5内容详细

目录:

1.url函数

2.无名分组

3.有名分组

4.反向解析

5.无名分组反向解析

6.有名分组反向解析

7.路由分发

8.伪静态的概念

9.虚拟环境

10.django1和2的区别

11.JsonResponse

12.django文件上传

url函数

#路由匹配的原则:在列表中的路由,逐个往下匹配,一旦找到一个,立即执行对应的函数,不再往下匹配

#路由后缀的斜杠是django自动给你添加的,默认情况,我们可以设置一些参数来修改的默认
#添加在settings的STATIC_URL下面
APPEND_SLASH =True#默认情况下给你添加/
APPEND_SLASH =False#默认情况下就不给你添加/

#url函数的第一个参数是支持正则表达式的,直接把正则表达式的相关内容拿过来就可以用

#首页的路由:
url(r'^$',views.home)

无名分组

'''
	分组:把一个正则表达式用小括号括起来
'''
url(r'^test/(\d+)/$',views.test)
#无名分组就是把匹配的内容当成位置参数传递给视图函数

有名分组

#有名分组:把一个正则表达式用小括号括起来,然后给这个括起来的内容起一个名字
url(r'^testadd/(?p<year>\d+)/$')
#有名分组就是把匹配的内容当成关键字参数传递给视图函数

"""无名和有名不要混合使用,但是单个的无名或者单个的有名可以多次使用,即是,要么多用有名要么多用无名"""
#例如:
url(r'^test/(\d+)/(\d+)/(\d+)/$',views.test)
url(r'^testadd/(?p<year>\d+)/(?p<year>\d+)/(?p<year>\d+)/$')

反向解析

#反向解析:可以给每一个路由起一个别名,然后,通过一些方法反向解析

url(r'^testadd/(?p<year>\d+)/$',views.testadd,name='xxx')

#后端反向解析
from django.shortcuts import reverse
print(reverse('xxx')) #/index/
#前端反向解析
<a href="{% url 'xxx' %}">啊啊啊啊啊</a>

无名分组反向解析

url(r'^testadd/(\d+)/$',views.testadd,name='xxx')

#后端反向解析
from django.shortcuts import reverse
print(reverse('xxx',args=(1,))) #/index/1
#需要指定一个参数,这个参数必须符合正则表达式

#前端反向解析
<a href="{% url 'xxx' 111 222 %}">啊啊啊啊啊</a>

有名分组反向解析

#后端反向解析
from django.shortcuts import reverse
print(reverse('xxx',kwargs={'year':123})) #/index/1
#需要指定一个参数,这个参数必须符合正则表达式

#前端反向解析
<a href="{% url 'xxx' year=123 %}">啊啊啊啊啊</a>

路由分发

#目前来说,一个django项目只有一个总路由文件 urls.py
#由于django项目可以有多个app应用,每一个应用都可以有自己的路由文件,成为子路由
#在应用里不会自动创建,需要我们手动创建

'''为什么要路由分发?因为当总路由中有非常多的路由的时候,就会显得杂乱无章,我们这个时候就可以按照路由进行路由分发,把不同的路由写到对应的应用里去,然后总路由文件做分发处理'''

导入:
from app01 import urls as app01_urls
from app02 import urls as app02_urls
#第一种方式,由总路由做分发
url(r'^app01',include(app01.app01_urls))
url(r'^app01',include(app01.app01_urls))

/app01/reg#先在总路由中匹配到app01,后再到app01的urls中匹配reg

#第二种方式,
#不用导入应用的urls
url(r'^app01',include('app01.urls'))#必须是字符串形式

'''路由中的后缀坚决不能加¥符'''

伪静态的概念

#静态文件:写死的一些东西

#伪静态
把一些动态的网页伪装成静态网页

'''为什么要伪装呢?'''
#因为静态的网页更容易被搜索引擎抓取到
#搜索引擎其实是一个巨大的爬虫程序,你在百度中搜索一个美女,百度用这个关键字从网络上去爬取数据,然后将爬到的数据,返回到百度的页面。

#为了把我们的网页被搜索引擎更好的抓取到
seo------->免费的
sem------->收费的------>广告----->花钱靠前

虚拟环境

#就是正常的开发,应该给每一个项目都配备一个虚拟环境
'''一个虚拟环境相当于是一个纯净的python解释器'''
#针对一个新的项目,解释器上只装跟本项目有关的模块,其余没用的都不装

#如何去创建虚拟环境
'''虚拟环境不要创建过多,占用不必要的资源'''

image-20230424200436422

django1和django2的区别

#1.django1中路由使用的是url
#django2中路由使用的是path
'''url支持的是正则,path则是精准匹配'''
#2.虽然path不支持正则,但是它也有使用正则的方法
re_path---------->url--------->支持正则

3.path支持五种转换器
'''
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
'''

#掌握str、int、path

4.创建表关系
#django中的表关系是默认级联更新级联删除
#django2需要执行on_delete参数

n_delete
当删除关联表中的数据时,当前表与其关联的行的行为。

models.CASCADE
删除关联数据,与之关联也删除

models.DO_NOTHING
删除关联数据,引发错误IntegrityError

models.PROTECT
删除关联数据,引发错误ProtectedError

models.SET_NULL
删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

models.SET_DEFAULT
删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

models.SET
删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

视图层

三板斧

基础都是HttpResponse

JsonResponse

#json格式的数据:
可以进行跨语言传输
#{"username":"kevin"}

'''
	python中
	序列化: json.dumps()
	反序列化:json.loads()
	js中:
	序列化:JSON.stringify()
	反序列化:JSON.parse()
'''

django中我们使用JsonResponse
1.导入
from django.http import JsonResponse
user_dict={'username':'jack'}
user_data=JsonResponse(user_dict)

return HttpResponse(user_data)
##遇到新的方法的时候,点进去看看,追一追代码,可以看的懂一些

l=[1,2,3,4]
user_data=JsonResponse(l,safe_parameter=False)
#这样就可以转非字典数据

django如何上传文件

#表单上传文件需要满足的条件:
1.method=post
2.enctype=form-data

request.POST#只能接受普通数据,不能接收文件数据
request.FILES#可以接收文件数据
posted @ 2023-04-24 21:10  yedayang  阅读(28)  评论(0)    收藏  举报