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

做一个美食网站怎么做青岛模版网站建设哪家好

做一个美食网站怎么做,青岛模版网站建设哪家好,dz论坛网站后台设置,wordpress 链接按钮系列文章目录 Django入门全攻略#xff1a;从零搭建你的第一个Web项目Django ORM入门指南#xff1a;从概念到实践#xff0c;掌握模型创建、迁移与视图操作Django ORM实战#xff1a;模型字段与元选项配置#xff0c;以及链式过滤与QF查询详解Django ORM深度游#xff… 系列文章目录 Django入门全攻略从零搭建你的第一个Web项目Django ORM入门指南从概念到实践掌握模型创建、迁移与视图操作Django ORM实战模型字段与元选项配置以及链式过滤与QF查询详解Django ORM深度游探索多对一、一对一与多对多数据关系的奥秘与实践跨域问题与Django解决方案深入解析跨域原理、请求处理与CSRF防护Django视图层探索GET/POST请求处理、参数传递与响应方式详解Django路由与会话深度探索静态、动态路由分发以及Cookie与Session的奥秘…可在同专栏下查看最近更新文章 文章目录 系列文章目录前言一、静态路由1.1 静态路由匹配方式1.2 静态路由示例 二、动态路由2.1 动态路由参数传递2.2 动态路由转换器2.3 动态路由传参与GET传参的异同点 三、路由分发3.1 路由分发的概念3.2 include路由分发实现 四、Cookie4.1 HTTP短连接是什么4.2 状态保持是什么4.3 什么是COOKIE4.4 框架对于COOKIE的操作 五、Session5.1 Session的原理5.2 框架是如何存储管理Session的5.3 框架如何操作Session5.4 Session示例5.5 Session与Cookie的对比 六、CSRF6.1 什么是CSRF6.2 CSRF攻击模拟实现6.3 如何防止CSRF攻击 前言 主要介绍了Django中静态路由、动态路由、路由分发、Cookie和Session以及CSRF等内容 一、静态路由 Django的路由系统中通过urls的匹配可以直接映射到特定的视图函数或类视图在当前整个路由中没有携带任何动态改变的值称之为静态路由。 通俗来说访问路径中不存在动态传递数据称之为静态路由 urlpatterns属性 urlpatterns是路由文件中的一个全局变量用来存放路由及视图函数的映射关系 用户发起的请求URL都会首先进入主控制目录下的这个urls.py文件中进行查找匹配: 首先找到urls.py下的urlpatterns全局变量这是一个路由规则实例的列表数据。按照先后定义顺序进行路由匹配。找到第一个匹配项时停止匹配执行匹配到的视图函数。遍历完全未发现匹配django进行异常处理 其中urlpatterns中的每一个路由映射规则可以由path或re_path进行构造 1.1 静态路由匹配方式 path方法 path(str, view, kwargsNone, nameNone)str一个匹配对应url地址的规则字符串 view路由对应的视图函数并且会自动封装HttpRequest作为第一个参数给这个视图函 kwargs视图函数的关键字参数 name该路由的全局命名可以让我们方便的在django项目中任意部分显示的使用相当于为url取变量名接下来全局使用该命名值即可当对应url路由改变之后结合路由反向解析使用的地方不需要更改路由案例a href{% url url_name %}/are_path方法 re_path(regex, view, kwargsNone, nameNone)regex一个匹配对应url地址的规则字符串 view路由对应的视图函数并且会自动封装HttpRequest作为第一个参数给这个视图函 kwargs视图函数的关键字参数 name该路由的全局命名可以让我们方便的在django项目中任意部分显示的使用相当于为url取变量名接下来全局使用该命名值即可当对应url路由改变之后结合路由反向解析使用的地方不需要更改路由1.2 静态路由示例 # views.py from django.http import HttpResponse def index(request):return HttpResponse(Hello Worlds!) # urls.py from django.urls import path,re_path from urlapp import views urlpatterns [path(index/,views.index),re_path(r^/$,views.index),#此处完善对应的正则表达式即可re_path(r^index/\d/$,IndexView.as_view()), #CBV ]二、动态路由 动态路由访问路径中存在动态传递数据称之为动态路由 2.1 动态路由参数传递 例如在遇到一些内容翻页的场景时我们的连接可能是xx.com/airticle_list/1/、xx.com/airticle_list/2/ # views.py def index(request,x,y):content x:%s\ny:%s % (x,y) return HttpResponse(content)定义如上函数将会接收连接中的后两部份path值作为参数分别依次给到x和y 2.2 动态路由转换器 # urls.py from django.urls import path,re_path from urlapp import views urlpatterns [path(int:x/str:y/,views.index), # 指明类型 访问http://127.0.0.1:8000/1/abc/path(x/y/,views.index), # 不指明类型 访问http://127.0.0.1:8000/abc/abc/re_path(r^(?Px\d)/(?Py[a-zA-Z])/$), # (?Pnamepattern) 正则分组re_path(r^(\d)/([a-zA-Z])/$), ]其他内置Path转换器可以将我们的路由参数规定为指定类型 str匹配除了路径分隔符/之外的非空字符串这是默认的形式 int匹配正整数包含0 slug匹配字母、数字以及横杠、下划线组成的字符串 uuid匹配格式化的uuid如 075194d3-6885-417e-a8a8-6c931e272f00 path匹配任何非空字符串包含了路径分隔符自定义转换器 在Django中自定义路由转换器Custom Route Converter 允许你根据特定的正则表达式和规则来定义如何解析URL中的参数并将其传递给视图函数或类视图。这种机制允许你更加灵活地处理URL模式尤其是当内置的路由转换器如int、slug、path等无法满足你的需求时。 # urls.py from django.urls import path,re_path,converters class PhoneConverter:regex 1[3-9]\d{9}def to_python(self, value):return int(value)def to_url(self, value):return str(value)#在 项目的 urls.py 文件中 注册 自定义的路由转换器 converters.register_converter(PhoneConverter, phone) #在路由配置中 urlpatterns [path(index/phone:id/,views.index), # 指明类型 ] 2.3 动态路由传参与GET传参的异同点 动态路由传参参数需要参与路由匹配在路由匹配中获取参数GET参数参数部分不需要参与路由匹配在视图中获取参数 三、路由分发 3.1 路由分发的概念 每个子app都拥有自己独立的urls.py路由映射文件而主控路由文件里只需要使用include函数导入子app下路由文件即可这就是路由分发 3.2 include路由分发实现 from django.contrib import admin from django.urls import path,includeurlpatterns [path(admin/, admin.site.urls),path(urlapp/,include(urlapp.urls)) # 使用include 实现路由分发找到子app下的路由文件 ]四、Cookie 4.1 HTTP短连接是什么 HTTP短连接也称为非持久连接在HTTP/1.0中默认使用的是短连接。也就是说浏览器和服务器每进行一次HTTP操作就建立一次连接但任务结束就中断连接。 HTTP长连接也称为持久连接Persistent Connection或HTTP keep-alive连接是一种使用单个TCP连接来发送和接收多个HTTP请求/响应的通信方式。HTTP/1.1起默认使用长连接。与HTTP短连接不同长连接在发送一个HTTP请求后不会立即关闭TCP连接而是保持连接打开状态以便在同一连接上发送和接收后续的HTTP请求/响应。 4.2 状态保持是什么 Cookie及Session一直以来都是Web开发中非常关键的一环因为HTTP协议本身为无状态每一次请求之间没有任何状态信息保持往往我们的Web服务无法在客户端访问过程中得知用户的一些状态信息比如是否登录等等那么这里通过引入Cookie或者Seesion来解决这个问题 客户端存储信息使用Cookie 服务端存储信息使用Session 4.3 什么是COOKIE 当客户端访问时服务端会为客户端生成一个Cookie键值对数据通过Response响应给到客户端。当下一次客户端继续访问相同的服务端时浏览器客户端就会将这个Cookie值连带发送到服务端. Cookie 是基于客户端的它们与用户的浏览器会话相关联。服务器使用Cookie来跟踪和识别用户的浏览器会话以便为用户提供个性化的体验或记住用户的设置和偏好。 Cookie 主要由以下几部分组成 名称NameCookie 的名称用于标识该 Cookie值Value与 Cookie 名称关联的值通常用于存储用户信息或状态。过期时间Expires/Max-Age指定 Cookie 的有效期。如果设置了过期时间则 Cookie 会在该时间后自动失效否则Cookie 将在浏览器关闭时失效。路径Path指定 Cookie 适用的页面路径。只有该路径下的页面才能访问该 Cookie。域Domain指定可以接收该 Cookie 的域名。通常设置为设置该 Cookie 的网站的域名。安全标志Secure如果设置了该标志则只能通过 HTTPS 协议传输该 Cookie。这有助于增加 Cookie 的安全性。HttpOnly 标志如果设置了该标志则 JavaScript 无法访问该 Cookie。这有助于防止跨站脚本攻击XSS。 4.4 框架对于COOKIE的操作 在django的代码中我们可以使用一些提供Response响应的类如HttpResponseredirect等实例的内置set_cookie函数来进行django项目中的Cookie设置 set_cookie(key, value, max_ageNone, expiresNone, path/,domainNone, secureFalse, httponlyFalse)参数解释 key: Cookie的key值未来通过该key值获取到对应设置好的Cookie。 value: 对应Cookie的key值的value比如: set_cookie(keyvalue,valueshuai) max_ageNone: Cookie生效的时间单位为秒如果Cookie值只持续在客户端浏览器的会话时长那么这个值应该为None。存在该值时expires会被计算得到。 expiresNone: Cookie具体过期日期是一个datetime.datetime对象如果该值存在那么max_age也会被计算得到 如果同时设置了expires和max_age老版本中以expires为准新版本中会报错建议使用:单独使用max_agepath/: 指定哪些url可以访问到Cookie默认/为所有。 domainNone: 当我们需要设置的为一个跨域的Cookie值那么可以使用该参数比如: domain.test.com那么这个Cookie值可以被www.test.com、bbs.test.com等主域名相同的域所读取否则Cookie只被设置的它的域所读取。为None时代表当前域名下全局生效。 secureFalse: https加密传输设置当使用https协议时需要设置该值同样的如果设置该值为True如果不是https连接情况下不会发送该Cookie值。 httponlyFalse: HTTPOnly是包含在HTTP响应头部中Set-Cookie中的一个标记。为一个bool值当设置为True时代表阻止客户端的Javascript访问Cookie。这是一种降低客户端脚本访问受保护的Cookie数据风险的有效的办法。设置COOKIE: # views.py from django.shortcuts import render,HttpResponse # Create your views here.def set_cookie(request):# 在HTTPResponse部分设置COOKIE值cookie_reponse HttpResponse(这是一个关于cookie的测试)cookie_reponse.set_cookie(test,hello cookie)return cookie_reponse以上视图函数返回一个HttpResponse对象并在该对象中集成COOKIE值的设定设置key值为testvalue值为hello cookie 设置过期时间 import datetime current_time datetime.datetime.now() # 当前时间 expires_time current_time datetime.timedelta(seconds10) # 向后推延十秒 set_cookie(key,value,expiresexpires_time) #设置Cookie及对应超时时间datetime.timedelta是Python中一个用于表示时间差的类。它可以表示一段时间例如几天、几小时、几分钟等。使用datetime.timedelta可以在日期和时间上进行简单的加减操作。获取COOKIE def get_cookie(request):# 获取cookie值从request属性中的COOKIE属性中cookie_data request.COOKIES.get(test)return HttpResponse(Cookie值为:%s % cookie_data)Cookie值存储在request中的COOKIES属性中 并且该属性获取到的结果与python中的字典类似直接通过内置函数get获取即可 删除COOKIE def delete_cookie(request):response HttpResponseRedirect(/check_cookie/)response.delete_cookie(test)return response在Cookie中删除指定的key及对应的value如果key值不存在也不会引发任何异常。 防止篡改COOKIE 通过set_signed_cookie函数进行持有签名的COOKIE值设置避免用户在客户端进行修改 HttpResonse.set_signed_cookie(key, value, salt, max_ageNone, expiresNone, path/, domainNone, secureNone, httponlyTrue) # 为cookie值添加签名其余参数与set_cookie相同Request.get_signed_cookie(key, salt, max_ageNone) # 从用户请求中获取通过salt盐值加了签名的Cookie值这里的salt要与之前存储时使用的salt值相同才可以解析出正确结果。 还要注意的是如果对应的key值不存在则会引发KeyError异常所以要记得异常捕获来确定是否含有Cookie值 def check_salt_cookie(request):try:salt_cookie request.get_signed_cookie(keysalt_cookie,saltnice)except KeyError: #获取不到该key值的Cookieresponse HttpResponse(正在设置一个salt Cookie值)response.set_signed_cookie(keysalt_cookie,saltnice,valuesalt_cookie)return responseelse: #获取到了对应key值展示到新的HttpResonse中return HttpResponse(获取到的salt Cookie值:%s % salt_cookie)五、Session 5.1 Session的原理 Session在网络中又称会话控制简称会话。用以存储用户访问站点时所需的信息及配置属性。当用户在我们的Web服务中跳转时存储在Session中的数据不会丢失可以一直在整个会话过程中存活。 5.2 框架是如何存储管理Session的 在django中默认的Session存储在数据库中session表里。默认有效期为两个星期。 5.3 框架如何操作Session 当settings.py中SessionMiddleware激活后 在视图函数的参数request接收到的客户端发来的HttpResquest请求对象中都会含有一个session属性 存储session request.session[key] value request.session[name] zs获取Session session_data request.session.get(Key) session_data request.session[Key]在Session中获取对应值get方法获取时如不存在该Key值不会引发异常返回None; 而第二种直接通过get方法获取如Key值不存在引发KeyError 删除Session del request.seesion[Key] # 删除对应sessionKey值不存在时引发KeyErrorrequest.session.clear() # 清空Session中的所有数据。这里客户端还会保留sessionid # 只不过在服务端sessionid对应的数据没有了request.session.flush() # 直接删除当前客户端的的Seesion数据。这里不光服务端sessionid对应的数据没有了客户端的sessionid也会被删除设置有效期 request.session.set_expiry(value) # 设置Session的有效时间value: 有效时间。- 为整数时: 将在value为秒单位之后过期 - 为0时: 将在用户关闭浏览器之后过期。- 为None时: 使用全局过期的设置默认为两个星期14天。- 为datetime时: 在这个指定时间后过期 2023-8-10 120000request.session.get_expiry_age() # 返回距离过期还剩下的秒数request.session.clear_expired() # 清除过期的Session会话5.4 Session示例 from django.shortcuts import render,HttpResponseimport datetimedef set_session(request):if request.session.get(test_id):session_data request.session.get(test_id)# 用户拿到的的session随机字符串session_key request.session.session_key # 获取客户端浏览器中的SessionID值session_expire request.session.get_expiry_age()now datetime.datetime.now()expire_time now datetime.timedelta(secondssession_expire)response_body divSessionID : %s/div % session_key \divSession : %s/div % session_data \divExpireTime : %s/div % expire_timereturn HttpResponse(response_body)else:request.session[test_id] TESTrequest.session.set_expiry(None)return HttpResponse(已设置好Session)用户在第一次访问时会走else分支此时还没有任何服务端的Session及客户端的Cookie值设定 那么我们会通过request.session[Key]的方式来设置一个Session值值为TEST 当用户第二次访问时将展示出所设置好的Session值及在客户端浏览器中存储的sessionid def delete_session(request):if request.session.get(test_id):del request.session[test_id]return HttpResponse(Session被删了)else:return HttpResponse(目前没有任何需要删除的session)5.5 Session与Cookie的对比 1.cookie数据存放在客户的浏览器上session数据放在服务器上。 2. cookie不是很安全别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。 3. session会在一定时间内保存在服务器上。当访问增多会比较占用你服务器的性能考虑到减轻服务器性能方面应当使用COOKIE。 4. 单个cookie保存的数据不能超过4K很多浏览器都限制一个站点最多保存20个cookie。 六、CSRF 6.1 什么是CSRF CSRFCross-site request forgery跨站请求伪造。 6.2 CSRF攻击模拟实现 从上图可以看出要完成一次 CSRF 攻击受害者必须满足两个必要的条件 1登录受信任网站 A并在本地生成 Cookie。如果用户没有登录网站 A那么网站 B 在诱导的时候请求网站 A 的 api 接口时会提示你登录 2在不登出 A 的情况下访问危险网站 B其实是利用了网站 A 的漏洞。 6.3 如何防止CSRF攻击 讨论 GET 和 POST 两种请求对于 GET其实也没什么需要防范的。为什么 因为 GET 在 “约定” 当中被认为是查询操作查询的意思就是你查一次查两次无数次结果都不会改变用户得到的数据可能会变这不会对数据库造成任何影响所以不需要加其他额外的参数。 所以这里要提醒各位的是尽量遵从这些约定不要在 GET 请求中出现 /delete, /update, /edit 这种单词。把 “写” 操作放到 POST 中。 对于 POST服务端在创建表单的时候可以加一个隐藏字段也是通过某种加密算法得到的。在处理请求时验证这个字段是否合法如果合法就继续处理否则就认为是恶意操作。 form methodpost action/delete!-- 其他字段 --input typehidden / /form这个 html 片段由服务端生成。 这的确是一个很好的防范措施再增加一些处理的话还能防止表单重复提交。 可是对于一些新兴网站很多都采用了 “前后端分离开发” 的设计或者退一步无论是不是前后端分离它的 HTML 可能是由 JavaScript 拼接而成并且表单也都是异步提交。所以这个办法有它的应用场景也有局限性。
http://www.w-s-a.com/news/273405/

相关文章:

  • 淘宝建设网站的好处韶关市网站建设招标
  • 佛山高端网站免费招聘网站建设
  • 申请网站就是做网站吗wordpress tag 优化
  • 建站系统排行榜菏泽机关建设网站
  • 网站群建设费用科技通信网站模板下载
  • 网站开发的流程是怎样的自己做自媒体在哪个网站比较好
  • 网站的html代码在哪网页线上开发制作
  • 免费商用自媒体图片网站做网站好的公司有哪些
  • 阿雷网站建设公司中国建筑考试网官网首页
  • 厦门网站制作网页无法跳转到建设银行网站
  • 怎么建设自己网站简述网页布局的几种方法
  • 软文营销文案100篇如何优化搜索引擎的搜索功能
  • 做网站创意杭州家具网站建设方案
  • 福州seo网站推广优化乐清建网站
  • 莆田cms建站模板简述网站设计流程
  • 班级网站建设组织机构建设注册中心网站首页
  • 即墨网站建设地址怎么在文档中做网站一点就开
  • 做网站联系方式互联网行业分析
  • 杭州网站建设索q479185700高淳网站建设
  • 有什么做任务拿钱的网站精准的搜索引擎优化
  • 洛阳有建社网站的吗电力建设工程质量监督总网站
  • 网站404报错热水器网站建设 中企动力
  • 网站降权恢复淘宝 网站建设
  • 安州区建设局网站台州优秀关键词优化
  • 网站假设教程湖南微信管理系统
  • 网站备案属于公司哪一块哪个网站是专门做封面素材
  • 广州个人做网站内江建设局网站
  • 网站开发 360百科大连哪里有手机自适应网站建设维护
  • 如何查网站pv网站功防教程
  • 建设银行网站信息补充营销推广的作用