用于网站建设的图片,万州网站制作公司,怎么分享wordpress,信息免费发布平台1.Django基础
路由系统视图模板静态文件和媒体文件中间件ORM#xff08;时间#xff09;
2.路由系统
本质上#xff1a;URL和函数的对应关系。
2.1 传统的路由
from django.contrib import admin
from django.urls import path
from apps.web import viewsurlpatterns …1.Django基础
路由系统视图模板静态文件和媒体文件中间件ORM时间
2.路由系统
本质上URL和函数的对应关系。
2.1 传统的路由
from django.contrib import admin
from django.urls import path
from apps.web import viewsurlpatterns [path(home/, views.home),path(news/int:nid/edit/, views.news),path(article/, views.article),
]from django.shortcuts import render, HttpResponsedef home(request):return HttpResponse(成功)def news(request, nid):print(nid)page request.GET.get(page)return HttpResponse(新闻)def article(request):nid request.GET.get(nid)print(nid)return HttpResponse(文章)int整数str字符串 /slug字母数字下滑线±uuiduuid格式path路径可以包含 /
2.2 正则表达式路由
在django1版本用的多。在django2版本用的少 2.3 路由分发
假如200个功能。
inlucde app一般将功能拆分不到不同的app中。 手动路由分发可以与app无关。
path(user/add/, views.login),
path(user/delete/, views.login),
path(user/edit/, views.login),
path(user/list/, views.login),path(user/, ([path(add/, views.login),path(delete/, views.login), # /user/delete/path(edit/, views.login),path(list/, views.login),], None, None)),纯粹帮助提取功能的URL防止重复编写。路由分发的本质 URL对应函数 path(user/add/, views.login),URL对应元组 path(user/add/, (元素,appname元素,namespance元素) ),path(user/add/, include(apps.api.urls) ),
path(user/add/, ([],None,None) ),小结 include或手动元组列表本质相同。 应用场景和意义想要把一些URL前缀提取出来。 path(user/add/, views.login),
path(user/delete/, views.login),
path(user/edit/, views.login),
path(user/list/, views.login),path(user/, ([path(add/, views.login),path(delete/, views.login), # /user/delete/path(edit/, views.login),path(list/, views.login),], None, None)),path(users, include(([path(add/, views.login),path(delete/, views.login), # /user/delete/path(edit/, views.login),path(list/, views.login),], None))),include(apps.api.urls) # 一般是每个app中urls
urlpatterns []2.4 name
给一个路由起个名字 根据名字反向生成URL。
urlpatterns [path(login/, views.login),
]# 很多功能很多URL
urlpatterns [path(login/, views.login, namev1),path(auth/, views.auth, namev2),
]有了名字后以后一般有两处会用到 在视图函数中生成URL from django.urls import reverse
url reverse(v2) # /auth/
url reverse(v1) # /login/HTML模板页面上有一个a标签添加xx。 a href/xxx/xxx/xx/添加/aa href{% url v1 %}添加/a
a href{% url v2 %}添加/a扩展 以后做权限管理让name属性配合。2.5 namespace
辅助name。 主路由 from django.urls import path, re_path, include# 很多功能很多URL
urlpatterns [path(api/, include(apps.api.urls,namespacex1)),path(web/, include(apps.web.urls,namespacex2)),
]api/urls.py from django.urls import path, re_path
from . import views
# 很多功能很多URL
urlpatterns [path(login/, views.login,namelogin),path(auth/, views.auth, nameauth),
]web/urls.py from django.urls import path, re_path
from . import views
# 很多功能很多URL
urlpatterns [path(home/, views.home,namehome),path(order/, views.order,nameorder),path(auth/, views.order, nameauth),
]以后再某个URL或者视图中反向生成
from django.urls import reverse
url reverse(x1:login) # /api/login/
url reverse(x1:order) # /web/login/url reverse(x1:auth) # /api/login/
url reverse(x2:auth) # /web/login/两个扩展 namespace需要设置app_name urlpatterns [path(api/, include(apps.api.urls, namespacex1)),
]from django.urls import path, re_path
from apps.api import views# 很多功能很多URL
urlpatterns [path(login/, views.login, namelogin),path(auth/, views.auth, nameauth),
]app_name api手动分发
赠送 2.4 最后的 / 如何解决
APPEND_SLASH True
path(login/, views.login),http://127.0.0.1:8000/login/ 成功http://127.0.0.1:8000/login django重定向301http://127.0.0.1:8000/login/ 成功path(login, views.login),http://127.0.0.1:8000/login 成功http://127.0.0.1:8000/login http://127.0.0.1:8000/login/ 失败APPEND_SLASH False
path(login/, views.login),http://127.0.0.1:8000/login/ 成功http://127.0.0.1:8000/login 失败path(login, views.login),http://127.0.0.1:8000/login/ 失败http://127.0.0.1:8000/login 成功2.5 当前匹配对象 有什么用呀
某用户具有一些权限。 permissions [xx,login,account]
某用户具有一些权限。 permissions [login,account]小结 常见 必须掌握 传统路由路由分发name 差点意思 正则namapace当前对象 补充小知识点与django路由无关看源码时有关 关于 partial def _xx(a1, a2):return a1 a2data _xx(11, 22)
print(data) from functools import partialdef _xx(a1, a2):return a1 a2yy partial(_xx, a2100)data yy(2)
print(data)3.视图
3.1 文件or文件夹 3.2 相对和绝对导入urls 注意实现不要再项目根目录做相对导入。
原则
绝对导入相对导入层级深
3.3 视图参数
urlpatterns [path(login/, account.login, namelogin),path(auth/, order.auth, nameauth),
]
from django.shortcuts import HttpResponsedef login(request):return HttpResponse(login)requests是什么呢
对象包裹可以放很多东西。requests是一个对象存放了浏览器给咱们发过来的所有内容所以含有
- 请求相关所有的数据 当前访问的url、请求方式、...
- django额外添加的数据from django.shortcuts import HttpResponsedef login(request):# 1.当前URL /api/login/print(request.path_info)# 2.URL传递的参数print(request.GET)print(request.GET.get(age))# 3.请求方式 GET/POSTprint(request.method)# 4.如果post请求传递请求体原始数据print(request.body) # b{code:083Sjmll2yla694F3bll2DguCM2SjmlG,unionId:oP6QCsyT_9bk1dfSaVf0GEV5Y-yE} bv1123v2456# 4.1 请求体请求头 bv1123v2456 content-type:application/x-www-form-urlencodedprint(request.POST)print(request.POST.get(v1))print(request.POST.get(v2))# 4.2 请求体请求头 文件print(request.FILES) # 文件格式 multipart/form-dataprint(request.FILES.get(n1))print(request.FILES.get(n2))# 5.请求头# {Content-Length: , Content-Type: text/plain, Host: 127.0.0.1:8000, Connection: keep-alive, Cache-Control: max-age0, Sec-Ch-Ua: Not A;Brand;v99, Chromium;v102, Google Chrome;v102, Sec-Ch-Ua-Mobile: ?0, Sec-Ch-Ua-Platform: macOS, Upgrade-Insecure-Requests: 1, User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36, Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,application/signed-exchange;vb3;q0.9, Sec-Fetch-Site: none, Sec-Fetch-Mode: navigate, Sec-Fetch-User: ?1, Sec-Fetch-Dest: document, Accept-Encoding: gzip, deflate, br, Accept-Language: zh-CN,zh;q0.9,en;q0.8,zh-TW;q0.7, Cookie: csrftokenCdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy}print(request.headers)# 5.1 请求头有个特殊的cookie# request.headers[cookie] # csrftokenCdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy;sessionxxxx# {csrftoken: CdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy}print(request.COOKIES)# 6.requests中其他值print(request.resolver_match)return HttpResponse(login)3.4 返回值
HttpResponseJsonResponserenderredirect
from django.shortcuts import HttpResponse, redirect, render
from django.http import JsonResponsedef auth(request):passdef login(request):# 1.获取请求数据print(request)# 2.根据请求数据进行条件的判断 GET/POST GET.get(xx) POST.get(xx)# 3.返回数据# 3.1 字符串/字节/文本数据图片验证码# return HttpResponse(login)# 3.2 JSON格式前后端分离、app小程序后端、ajax请求# data_dict {status: True, data: [11, 22, 33]}# return JsonResponse(data_dict)# 3.3 重定向# return redirect(https://www.baidu.com)# return redirect(http://127.0.0.1:8000/api/auth/)# return redirect(http://127.0.0.1:8000/api/auth/)# return redirect(/api/auth/)# return redirect(/api/auth/) # name## from django.urls import reverse# url reverse(auth)# return redirect(url) # name# return redirect(auth)# 3.4 渲染# - a.找到 login.html 并读取的内容问题去哪里找# - 默认先去settings.TEMPLATES.DIRS指定的路径找。公共# - 按注册顺序每个已注册的app中找他templates目录去这个目录中寻找login.html# - 一般情况下原则那个app中的的模板去哪个那个app中寻找。# - b.渲染替换得到替换完成的字符串# - c.返回浏览器return render(request, api/login.html)3.5 响应头
from django.shortcuts import HttpResponse, redirect, render
from django.http import JsonResponsedef login(request):res HttpResponse(login)res[xx1] hahahares[xx2] hahahares[xx3] hahahares.set_cookie(k1,aaaaaaaa)res.set_cookie(k2,bbbbbb)return res3.6 FBV和CBV
FBV视图用函数的形式编写。目前主流CBV视图用类的形式编写。 请注意这一些都是表象本质一模一样。
4.静态资源
静态资源 开发需要css、js、图片。 - 根目录的 /static/
- 已经app目录下载 /static/ 文件夹下媒体文件用户上传的数据(excel/pdf/video) - 根目录的 /media/4.1 静态文件
INSTALLED_APPS [# django.contrib.admin,# django.contrib.auth,# django.contrib.contenttypes,# django.contrib.sessions,# django.contrib.messages,django.contrib.staticfiles,apps.api.apps.ApiConfig,apps.web.apps.WebConfig,
]
...STATIC_URL /static/
STATICFILES_DIRS (os.path.join(BASE_DIR, static),
)顺序… 多app开发各自app的图片放在各自 /static/app名字/。。。 在开发过程中 禁止 img src/static/api/1.png建议 {% load static %}!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
h1登录页面/h1
a href/xxx/xxxxx/调换dao xx/a
a href{% url login %}跳转/aimg src{% static api/1.png %}/body
/html4.2 媒体文件
urls.py
from django.contrib import admin
from django.urls import path, re_path, include
from django.conf.urls.static import static
from django.conf import settingsfrom apps.api import views# 很多功能很多URL
urlpatterns [path(api/, include(apps.api.urls)),
] static(settings.MEDIA_URL, document_rootsettings.MEDIA_ROOT)