2023年7月20日发(作者:)
Django基础知识点(引⽤)1.对Django的认识 是⾛⼤⽽全的⽅向,它最出名的是其全⾃动化的管理后台:只需要使⽤起ORM,做简单的对象定义,它就能⾃动⽣成数据库结构、以及全功能的管理后台。 内置的ORM跟框架内的其他模块耦合程度⾼。 应⽤程序必须使⽤Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利; 理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房⼦拆除重新装修,倒不如⼀开始就去⽑胚房做全新的装修。 的卖点是超⾼的开发效率,其性能扩展有限;采⽤Django的项⽬,在流量达到⼀定规模后,都需要对其进⾏重构,才能满⾜性能的要求。 适⽤的是中⼩型的⽹站,或者是作为⼤型⽹站快速实现产品雏形的⼯具。 模板的设计哲学是彻底的将代码、样式分离; Django从根本上杜绝在模板中进⾏编码、处理数据的可能。 、Flask、Tornado的对⽐⾛的是⼤⽽全的⽅向,开发效率⾼。它的MTV框架,⾃带的ORM,admin后台管理,⾃带的sqlite数据库和开发测试⽤的服务器给开发者提⾼了超⾼的开发效率是轻量级的框架,⾃由,灵活,可扩展性很强,核⼼基于Werkzeug WSGI⼯具和jinja2模板引擎o⾛的是少⽽精的⽅向,性能优越。它最出名的是异步⾮阻塞的设计⽅式 Tornado的两⼤核⼼模块: em:对⾮阻塞式的socket进⾏简单的封装 :对I/O多路复⽤的封装,它实现了⼀个单例3.什么是WSGI,uwsgi,uWSGI? ,web服务器⽹关接⼝,是⼀套协议。⽤于接收⽤户请求并将请求进⾏初次封装,然后将请求交给web框架(描述web server和webapplication的通信规则) WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端; ,与WSGI⼀样是⼀种通信协议,它是uWSGI服务器的独占协议,⽤于定义传输信息的类型 , 是⼀个web服务器,实现了WSGI协议,uWSGI协议,http协议,请求的⽣命周期 ,将请求封装之后交给web框架 2.中间件,对请求对象进⾏校验或者添加其他数据⽐如:csrf 3.路由匹配,根据不同的url匹配不同的视图函数 4.视图函数,在视图函数中对请求进⾏处理(可能涉及到ORM,Template渲染) 5.中间件,对响应的数据进⾏处理 ,,将响应的内容发送给浏览器和CBV FBV:基于函数的视图 CBV:基于类的视图 使⽤CBV的优点: 1.提⾼了代码的复⽤性,可以使⽤⾯向对象的技术,⽐如(多继承) 2.可以使⽤不同的函数对不同的HTTP⽅法进⾏处理,⽽不是使⽤if...判断,提⾼可读性6.给CBV程序添加装饰器 1.引⼊method_decorator模块 2.直接在类上添加装饰器 3.直接在⽅法上添加装饰器7.简述MVC和MTV MVC软件系统分为三个部分:模型(Model)、视图(View)和控制器(Controller) Model:负责业务对象和数据库的映射 View:负责与⽤户的交互 Controller:接受⽤户的输⼊调⽤模型和视图完成⽤户的请求 MTV软件系统分为三个部分:模型(Model),模板(Templates),视图(View) Model: 负责业务对象和数据库的映射 Template:负责把页⾯展⽰给⽤户 View: 负责与⽤户的交互(需要的时候调⽤Model和Template)路由系统中name的作⽤ ⽤户反向解析路由,相当于给url起了个别名,只要名字不变,即使路由改变,也能通过此名字找到路由9.列举Django的内置组件: 是对model中对应的数据表进⾏增删改查提供的组件 组件:负责操作数据库 组件:1.⽣成HTML代码2.数据有效性校验3校验信息返回并展⽰ orm组件即⽤于数据库操作,也可⽤于⽤户请求的验证中间件的作⽤和应⽤场景 中间件是介于request与response处理之间的⼀道处理过程,⽤于在全局范围内改变Django的输⼊和输出。 简单的来说中间件是帮助我们在视图函数执⾏之前和执⾏之后都可以做⼀些额外的操作 eg: 项⽬中默认启⽤了csrf保护,每次请求时通过CSRF中间件检查请求中是否有正确#token值 2.当⽤户在页⾯上发送请求时,通过⾃定义的认证中间件,判断⽤户是否已经登陆,未登陆就去登陆。中间件的⼏个⽅法 s_request : 请求进来时,权限认证 s_view : 路由匹配之后,能够得到视图函数 s_exception : 异常时执⾏ s_template_responseprocess : 模板渲染时执⾏ s_response : 请求有响应时执⾏的request对象是在什么时候创建的( ) class WSGIHandler(ndler): request = t_class(environ) 请求⾛到WSGIHandler类的时候,执⾏__cell__⽅法,将environ封装成了request 重定向的实现 1.使⽤HttpResponseRedirect 2.使⽤redirect和reverse 3.状态码:301和302 301:常⽤来做域名跳转(旧资源已经移除,跳转到新资源) 302:常⽤来做临时跳转(要访问的资源还在,但是没有条件访问)14 csrf实现机制 第⼀步:django第⼀次响应来⾃某个客户端的请求时,后端随机产⽣⼀个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页⾯; 第⼆步:下次前端需要发起请求(⽐如发帖)的时候把这个token值加⼊到请求数据或者头信息中,⼀起传给后端;Cookies:{csrftoken:xxxxx} 第三步:后端校验前端请求带过来的token和SESSION⾥的token是否⼀致;15基于django使⽤ajax发送post请求时,都可以使⽤哪种⽅法携带csrf token? 以键值对的形式放到要传输的数据data中本⾝提供了runserver,为什么不能⽤来部署?(runserver与uWSGI的区别) ver⽅法是调试 Django 时经常⽤到的运⾏⽅式,它使⽤Django⾃带的WSGI Server 运⾏,主要在测试和开发中使⽤,并且 runserver 开启的⽅式也是单进程 。是⼀个Web服务器,它实现了WSGI协议、uwsgi、http 等协议。注意uwsgi是⼀种通信协议,⽽uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。uWSGI具有超快的性能、低内存占⽤和多app管理等优点,并且搭配着Nginx就是⼀个⽣产环境了,能够将⽤户访问请求与应⽤ app 隔离开,实现真正的部署
。相⽐来讲,⽀持的并发量更⾼,⽅便管理多进程,发挥多核的优势,提升性能。和session的区别 和Session都是会话技术,Cookie是运⾏在客户端,Session是运⾏在服务器端。 有⼤⼩限制以及浏览器在存cookie的个数也有限制,Session是没有⼤⼩限制和服务器的内存⼤⼩有关。 有安全隐患,通过拦截或本地⽂件找得到你的cookie后可以进⾏攻击。 n是保存在服务器端上会存在⼀段时间才会消失,如果session过多会增加服务器的压⼒。 orm所有⽅法 #<1> all(): 查询所有结果
#<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象。获取不到返回None#<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有⼀个。获取不到会抱胸#如果符合筛选条件的对象超过⼀个或者没有都会抛出错误。#<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象#<5> order_by(*field): 对查询结果排序#<6> reverse(): 对查询结果反向排序
#<8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
#<9> first(): 返回第⼀条记录
#<10> last(): 返回最后⼀条记录
#<11> exists(): 如果QuerySet包含数据,就返回True,否则返回False#<12> values(*field): 返回⼀个ValueQuerySet——⼀个特殊的QuerySet,运⾏后得到的并不是⼀系 model的实例化对象,⽽是⼀个可迭代的字典序列#<13> values_list(*field): 它与values()⾮常相似,它返回的是⼀个元组序列,values返回的是⼀个字典序列#<14> distinct(): 从返回结果中剔除重复纪录19. F和Q的作⽤? #F:对数据本⾝的不同字段进⾏操作 如:⽐较和更新 #Q:⽤于构造复杂的查询条件 如:& |操作和values_list的区别 #values : 取字典的queryset #values_list : 取元组的 Form 和ModeForm的作⽤
Form作⽤: 1.在前端⽣成HTML代码 2.对数据作有效性校验 3.返回校验信息并展⽰ ModeForm: 根据模型类⽣成From组件,并且可以操作数据库缓存能⽤redis吗?如果可以的话应该如何配置? 1 #1.安装 pip install django-redis 2 #2.在stting中配置CACHES,可以设置多个缓存,根据名字使⽤ 3 CACHES = { 4 "default": { 5 "BACKEND": "django_ache", 6 "LOCATION": "redis://127.0.0.1:6379", 7 "OPTIONS": { 8 "CLIENT_CLASS": "django_tClient", 9 "CONNECTION_POOL_KWARGS": {"max_connections": 100}10 # "PASSWORD": "密码",11 }12 }13 },14 #另添加缓存15 "JERD": { }16 #3.根据名字去连接池中获取连接17 from django_redis import get_redis_connection18 conn = get_redis_connection("default")中如何根据数据库表⽣成model中的类? 1.在settings中设置要连接的数据库 2.⽣成model模型⽂件 python inspectdb 3.模型⽂件导⼊到models中 python inspectdb > app/24.谈谈你对restful规范的认识? #⾸先restful是⼀种软件架构风格或者说是⼀种设计风格,并不是标准,它只是提供了⼀组设计#原则和约束条件,主要⽤于客户端和服务器交互类的软件。
#就像设计模式⼀样,并不是⼀定要遵循这些原则,⽽是基于这个风格设计的软件可以更简洁,更#有层次,我们可以根据开发的实际情况,做相应的改变。25.给⽤户提供⼀个接⼝之前需要提前做什么 1.跟前端进⾏和交互,确定前端要什么 2.把需求写个⽂档保存 和UV #:页⾯访问量,没打开⼀次页⾯PV计算+1,页⾯刷新也是 #:独⽴访问数,⼀台电脑终端为⼀个访客27.如何实现⽤户的登陆认证# session# 登陆成功后⽣成加密字符串#:json wed token缩写 它将⽤户信息加密到token中,服务器不保存任何⽤户信息#服务器通过使⽤保存的密钥来验证token的正确性
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689824951a288933.html
评论列表(0条)