当前位置: 首页 > news >正文

pc网站制作公司专业的网站建设平台

pc网站制作公司,专业的网站建设平台,推广赚钱的项目,wordpress新建页面模板一 路由控制器 参考链接#xff1a; Django源码阅读#xff1a;路由#xff08;二#xff09; - 知乎 Route路由, 是一种映射关系#xff01;路由是把客户端请求的 url路径与视图进行绑定 映射的一种关系。 这个/timer通过路由控制器最终匹配到myapp.views中的视图函数 …一 路由控制器 参考链接 Django源码阅读路由二 - 知乎 Route路由, 是一种映射关系路由是把客户端请求的 url路径与视图进行绑定 映射的一种关系。 这个/timer通过路由控制器最终匹配到myapp.views中的视图函数 timer。 在django中所有的路由最终都被保存到一个变量 urlpatterns, urlpatterns必须声明在主应用下的urls.py总路由中。这是由配置文件settings设置的。 在django运行中当客户端发送了一个http请求到服务端服务端的web服务器则会从http协议中提取url地址, 从程序内部找到项目中添加到urlpatterns里面的所有路由信息的url进行遍历匹配。如果相等或者匹配成功则调用当前url对象的视图方法。 在给urlpatterns路由列表添加路由的过程中,django一共提供了2个函数给开发者注册路由字符串路由和正则路由。 from django.urls import path # 字符串路由 from django.urls import re_path # 正则路由会把url地址看成一个正则模式与客户端的请求url地址进行正则匹配# path和re_path 使用参数一致.仅仅在url参数和接收参数时写法不一样 1.1 基本使用 path and re_path 两种路由的使用 # 只要请求路径和正则匹配成功就会执行视图函数~ path(r^articles/2003/$, views.special_case_2003), re_path(r^articles/([0-9]{4})/$, views.year_archive),# $ 符 不会被上面的覆盖掉 上面的就匹配不成功了 # 1、简单分组 ([0-9]{4}) ([0-9]{2}) 是按位置传参的 和参数位置有关 re_path(r^articles/([0-9]{4})/([0-9]{2})/$, views.month_archive),#加个小括号是正则的简单分组 符合小括号的正则内容 会按形参入到视图函数中 函数也要接收~# 2、有名分组 ?Pyear ?Pmonth 是按关键字传参的 和参数位置无关 视图函数形参的参数名要保持一直 re_path(r^articles/(?Pyear[0-9]{4})/(?Pmonth[0-9]{2})/$, views.month_archive2), re_path(r^articles/(\d{4}/(\d{1,2})/$,articles_archive_by_month) 请求路径/articles/2010/12 # 简单分组 re.findall(articles/(\d{4}/(\d{1,2}),/articles/2010/12) # 左边是规则 后面是请求路径 一旦匹配成功调用articles_archive_by_month(request,2010,12) # (\d{4}/(\d{1,2})分组了 就会传参 视图函数就会在数据库里进行查询# 有名分组 一旦匹配成功 if 简单分组调用articles_archive_by_month(request,2010,12) # 位置传参 else if 有名分组调用articles_archive_by_month(request,year 2010,month 12) # 关键字传参1.2 路由分发 from django.urls import path, re_path, includepath(api/, include(erp_system.urls)), path(api/, include(basic_info.urls)), path(api/, include(goods_info.urls)), path(api/, include(purchase_info.urls)), path(api/, include(warehouse_info.urls)), 1.3 反向解析 在使用Django 项目时一个常见的需求是获得URL 的最终形式以用于嵌入到生成的内容中视图中和显示给用户的URL等或者用于处理服务器端的导航重定向等。人们强烈希望 不要硬编码这些URL费力、不可扩展且容易产生错误或者设计一种与URLconf 毫不相关的专门的URL 生成机制因为这样容易导致一定程度上产生过期的URL。 反向解析就是路由不想写死 在需要URL 的地方对于不同层级Django 提供不同的工具用于URL 反查 在模板中使用url模板标签 在Python 代码中使用from django.urls import reverse 函数。视图函数重定向中写url时 urls.py中为url设置别名参数 from django.conf.urls import url from . import viewsurlpatterns [#...namenews-year-archiveurl(r^articles/([0-9]{4})/$, views.year_archive, namenews-year-archive),#... ] 应用之在模板中反向解析: {% url news-year-archive 2012 %} 别名news-year-archive 正则参数2012。 a href{% url news-year-archive 2012 %}2012 Archive/a a href/articles/2012/2012 Archive/a from django.shortcuts import redirect from django.urls import reversedef redirect_to_year(request):year 2006reverse_pathreverse(news-year-archive, args(year,))return redirect(reverse_path) # 等效 redirect(/articles/2006/) 二 视图 Django的视图主要有2种分别是视图函数和 视图类 现在我们先从视图函数(FBV)进行入手后面再学习视图类(CBV) Function BaseView函数基本视图 Class BaseView类基本视图 2.1 请求方式 web项目运行在http协议下,默认肯定也支持用户通过不同的http请求发送数据来。django支持让客户端只能通过指定的Http请求来访问到项目的视图。 home/views.py # 让用户发送POST才能访问的内容 from django.views.decorators.http import require_http_methods require_http_methods([POST]) def login(request):# 获取请求方式 GET/POSTprint(request.method)# 获取请求体数据print(request.body) # 一个字符串代表请求报文的请求体的原数据print(request.POST) # 只有请求数据格式是 urlencoded 时才能获取到# 获取具体数据user request.POST.getuser# get()获取键对应值的列表里的最后一个元素hobby request.POST.getlisthobby# 获取值列表里的所有元素return HttpResponse(登录成功) 路由绑定demo/urls.py,代码: from django.contrib import admin from django.urls import path from home.views import timer urlpatterns [path(admin/, admin.site.urls),path(timer, timer),path(login, login), ] 2.2 请求对象 django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest 类中的属性。 除了特殊说明的之外其他均为只读的。 HttpRequest 对象包含当前请求URL的一些信息 # 进入注册页面的视图函数 require_http_methods([GET]) def register(request):print(进入register视图函数)user_id request.GET[id]print(user_id, type(user_id))return HttpResponse(f你传入的用户ID是{user_id}) 2.2.1 请求方式 print(request.method) 2.2.2 请求数据 1. HttpRequest.GET:一个类似于字典的对象包含 HTTP GET 的所有参数。详情请参考 QueryDict 对象。 2. HttpRequest.POST:一个类似于字典的对象如果请求中包含表单数据则将这些数据封装成 QueryDict 对象。# 注意键值对的值是多个的时候, # 比如checkbox类型的input标签select标签需要用request.POST.getlist(hobby)。 3. HttpRequest.body:一个字符串代表请求报文的请求体的原数据。 2.2.3 请求路径 HttpRequest.path:  表示请求的路径组件不含get参数只是路径部分。HttpRequest.get_full_path()含get参数的路径。 2.2.4 请求头 HttpRequest.META:一个标准的Python 字典包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器HttpRequest.META.get(HTTP_HOST)。 2.3 响应对象 响应对象主要有三种形式 HttpResponse()     # 响应基础类JsonResponse()     # json格式的响应 接口编程DRF render()     # 内核都是HttpResponse() redirect()   # 内核都是HttpResponse() 2.3.1 HttpResponse() Django服务器接收到客户端发送过来的请求后会将提交上来的这些数据封装成一个 HttpRequest 对象传给视图函数。那么视图函数在处理完相关的逻辑后也需要返回一个响应给浏览器。 而这个响应我们必须返回 HttpResponseBase 或者他的子类的对象。而 HttpResponse 则是 HttpResponseBase 用得最多的子类。 return HttpResponse(登录成功,status404,content_typetext/plain) 常用属性 content返回的内容。 status_code返回的HTTP响应状态码。 content_type返回的数据的MIME类型默认为 text/html 。浏览器会根据这个属性来显示数据。如果是 text/html 那么就会解析这个字符串如果 text/plain 那么就会显示一个纯文本。 设置响应头 response[X-Access-Token] xxxx 。 2.3.1.2 JsonResponse类 用来对象 dump 成 json 字符串然后返回将 json 字符串封装成 Response 对象返回给浏览器。并且他的 Content-Type 是 application/json 。示例代码如下 from django.http import JsonResponsedef index(request):book {title:三国演义,price:199}books [{title:三国,price:99},{title:三国演义,price:199}]# JsonResponse(book)本质 是先序列化json.jump ensure_asciiFalse 使数据正常显示 。content_typeapplication/json 声明一下响应类型# return HttpResponse(json.jump(book,ensure_asciiFalse),content_typeapplication/json)# return JsonResponse(book) # 默认是序列化一个字典return JsonResponse(books,safeFalse) # 序列化一个非字典数据列表 默认情况下 JsonResponse 只能对字典进行 dump 如果想要对非字典的数据进行 dump 那么需要给 JsonResponse 传递一个 safeFalse 参数。 2.3.2 render() 渲染函数 render(request, template_name,[context] #结合一个给定的模板和一个给定的上下文字典并返回一个渲染后的 HttpResponse 对象。\ render(request,users/index.html,[ip:2013] 参数 /*request 用于生成响应的请求对象。iptemplate_name要使用的模板的完整名称可选的参数。模板文件非html文件因为里面有模板语句{{ip}}渲染后呈现在浏览器中的才是htm页面context添加到模板上下文的一个字典,默认是一个空字典。如果字典中的某个值是可调用的视图将在渲染模板之前调用它。*/ render方法就是将一个模板页面中的模板语法进行渲染最终渲染成一个html页面作为响应体。 2.3.3 redirect方法 重定向 当您使用Django框架构建Python Web应用程序时您在某些时候必须将用户从一个URL重定向到另一个URL通过redirect方法实现重定向。 参数可以是: 一个绝对的或相对的URL, 将原封不动的作为重定向的位置. 一个url的别名: 可以使用reverse来反向解析url # 传递要重定向到的一个具体的网址 def my_view(request):...return redirect(/some/url/) # 当然也可以是一个完整的网址 def my_view(request):...return redirect(http://www.baidu.com) # 传递一个视图的名称 def my_view(request):...return redirect(reverse(url的别名)) 重定向 会有两次请求 第一次返回一个响应头location:/index/ /index/ 是 resirect里写的相对路径 code301 只要浏览器读取到301或302 就会发起新的请求 第二次返回一个index.html页面。 APPEND_SLASH的实现就是基于redirect默认补充浏览器请求路径的 / 在setting文件中配置 APPEND_SLASHFalse 将默认补充关闭。 三 登录验证案例 3.1 html !DOCTYPE html html langen headmeta charsetUTF-8titleTitle/title /head body/*/users/auth 相对路径一定要加第一个/*/ form action/user/auth methodpost用户名input typetext nameuser密码 input typepassword namepwd/*span标签提示错误信息*/input typesubmit span stylecolor: red{{ msg }}/span /form /body /html 3.2 路由配置 from django.contrib import admin from django.urls import path, re_path,includefrom users.views import login,auth urlpatterns [path(login,login),path(auth,auth), ] 3.3 视图函数 def login(request):return render(request,login.html)def auth(request):# 获取数据print(request.POST:,request.POST)user request.POST.get(user)pwd request.POST.get(pwd)# 模拟数据校验if user laomao and pwd 123456:# return HttpResponse(验证通过)return redirect(/users/)else:# return HttpResponse(用户名或者密码错误)# return redirect(/users/login)# 重定向适合动态页面 静态页面可以用render# 静态页面渲染一些信息一般用rendermsg 用户名或者密码错误return render(request,login.html,{msg:msg})
http://www.pierceye.com/news/581213/

相关文章:

  • 北碚免费建站哪家做得好佛山网站建设设计
  • 怎么做网站拍卖的那种wordpress主题搜索图标
  • 三亚网站建设平台查数据的权威网站
  • html网站制作答辩ppt网站备份和备案的区别
  • 网站开发需要工具免费的ps软件
  • 常州网站建设优质商家重庆互联网怎么样
  • 做网站发广告动漫网页设计报告
  • 求职招聘网站建设投标书沈阳网站建设的公司哪家好
  • 做导航网站有发展吗南京企业网站制作哪家好
  • 千万pv网站开发成本招聘网站数建设
  • 吐鲁番大型网站建设平台找客户去哪个平台
  • 权威网站有哪些给个网站可以在线
  • 优化网站专题北京海淀网站建设公司
  • 广州网站快速排名网站维护正常要多久
  • 建网站 选安全甘肃做网站价格
  • 微信公众管理平台有必要买优化大师会员吗
  • 家居网站建设素材腾讯adq广告平台
  • 响应式网站 图片居中门户网站样式
  • 潍坊网站排名推广北京建设高端网站的
  • 广东省住房和建设网站鹤壁市建设局网站
  • 北京网站建设报价明细手机网站网站开发流程
  • 三合一网站模板如何看网站是html几代做的
  • 如何设置自己的网站网站建设的常用词
  • 甘肃网站开发冷色调网站
  • 用cdr做网站设计尺寸要多少网站如何做实名验证码
  • 比较好的设计网站wordpress主题代码哪里
  • 专门学习网站建设读什么专业南山网站设计公司
  • 专业网站设计模板深圳最专业的高端网站建设
  • cc域名做网站怎么样无锡个人网站建设
  • 网站模板设计报价单小学网站建设设计方案