Django相关使用

首先了解什么是MVC、MVT

MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。
MVC:
M:Model,模型,和数据库进行交互
V:View,视图,负责产生 Html 页面
C:Controller,控制器,接收请求,进行处理,与 M 和 V 进行交互,返回应答。

在这里插入图片描述
django就是遵循MVC设计的,它有一个专有名词:MVT

MVT:
M:Model,模型,和 MVC 中的 M 功能相同,和数据库进行交互。
V:view,视图,和 MVC 中的 C功能相同,接收请求,进行处理,与 M 和 T 进行 交互,返回应答。
T:Template,模板,和 MVC 中的 V 功能相同,产生Html 页面.

1.django创建项目的命令

django-admin startproject 项目名称
python manage.py startapp 应用app名

2. Django创建项目后,项目文件夹下的组成部分

项目文件夹下的组成部分:
manage.py 是项目运行的入口,指定配置文件路径。与项目同名的目录,包含项目的配置文件。
__init__.py 是一个空文件,作用是这个目录可以被当作包使用。
settings.py 是项目的整体配置文件。
urls.py 是项目的URL配置文件,路由。
wsgi.py 是项目与 WSGI 兼容的 Web 服务器。

3.Django中models利用ORM对Mysql 进行查表的语句(多个语句)

字段查询:
all():返回模型类对应表格中的所有数据。

get():返回表格中满足条件的一条数据,如果查到多条数据,则抛异常:MultipleObjectsReturned, 查询不到数据,则抛异常:DoesNotExist。

filter():参数写查询条件,返回满足条件 QuerySet 集合数据。
条件格式:模型类属性名 条件名=值
注意:此处是模型类属性名,不是表中的字段名
关于 filter 具体案例如下:
判等exact:

BookInfo.object.filter(id=1)

模糊查询 like
例:查询书名包含’传’的图书。contains

contains BookInfo.objects.filter(btitle contains=’传’)

空查询 where 字段名 isnull

BookInfo.objects.filter(btitle isnull=False)

范围查询 where id in (1,3,5)

BookInfo.objects.filter(id in=[1,3,5])

比较查询 gt lt(less than) gte(equal) lte

BookInfo.objects.filter(id gte=3)

日期查询

BookInfo.objects.filter(bpub_date year = 1980)
BookInfo.objects.filter(bpub_date gt = date(1980,1,1))

exclude:返回不满足条件的数据。

BookInfo.objects.exclude(id=3)

order_by 返 回 QuerySet
作用:对查询结果进行排序。

例 : BookInfo.objects.all().order_by(‘id’)
例 :BookInfo.objects.all().order_by(’-id’)
例 :BookInfo.objects.filter(id gt=3).order_by(’-bread’)

聚合函数
作用:对查询结果进行聚合操作。

sum count max min avg

aggregate:调用这个函数来使用聚合。

from django.db.models import Sum,Count,Max,Min,Avg
例:BookInfo.objects.aggregate(Count(‘id’))

{‘id count’: 5} 注意返回值类型及键名

例:BookInfo.objects.aggregate(Sum(‘bread’))

{‘bread sum’:120} 注意返回值类型及键名

count 函 数
作用:统计满足条件数据的数目。例:统计所有图书的数目。

BookInfo.objects.all().count()

例:统计 id 大于 3 的所有图书的数目。

BookInfo.objects.filter(id gt = 3).count()

模型类关系:
1)一对多关系
例:图书类-英雄类
models.ForeignKey() 定义在多的类中。

2)多对多关系
例:新闻类-新闻类型类
models.ManyToManyField() 定义在哪个类中都可以。

3)一对一关系
例:员工基本信息类-员工详细信息类
models.OneToOneField() 定义在哪个类中都可以。

4.对 uWSGI 和 nginx 的理解

(4.1) uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。Nginx 中HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换。WSGI 是一种 Web 服务器网关接口。它是一个 Web 服务器(如 nginx,uWSGI 等服务器)与 web 应用(如用 Flask 框架写的程序)通信的一种规范。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

WSGI 是一种通信协议。

uwsgi 是一种线路协议而不是通信协议,在此常用于在 uWSGI 服务器与其他网络服务器的数据通信。

uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器。

(4.2) nginx 是一个开源的高性能的 HTTP 服务器和反向代理:
1.作为 web 服务器,它处理静态文件和索引文件效果非常高;
2.它的设计非常注重效率,最大支持 5 万个并发连接,但只占用很少的内存空间;
3.稳定性高,配置简洁;
4.强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力应用。

5.nginx 和 uWISG 服务器之间如何配合工作的

首先浏览器发起 http 请求到 nginx 服务,Nginx 根据接收到请求包,进行 url 分析,判断访问的资源类型,如果是静态资源,直接读取静态资源返回给浏览器,如果请求的是动态资源就转交给 uwsgi 服务,uwsgi 服务根据自身的 uwsgi 和 WSGI 协议,找到对应的 Django 框架,Django 框架下的应用进行逻辑处理后,将返回值发送到 uwsgi 服务,然后 uwsgi 服务再返回给 nginx,最后 nginx 将返回值返回给浏览器进行渲染显示给用户。

6.django 开发中数据库做过什么优化

(1)设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能;
(2)使用缓存,减少对数据库的访问;
(3)在 orm 框架下设置表时,能用 varchar 确定字段长度时,就别用 text;
(4)可以给搜索频率高的字段属性,在定义时创建索引;
(5)Django orm 框架下的 Querysets 本来就有缓存的;
(6)如果一个页面需要多次连接数据库,最好一次性取出所有需要的数据,减少对数据库的查询次数;
(7)若页面只需要数据库里某一个两个字段时,可以用 QuerySet.values();
(8)在模板标签里使用 with 标签可以缓存 Qset 的查询结果。

7.验证码过期时间怎么设置

将验证码保存到数据库或 session,设置过期时间为 1 分钟,然后页面设置一个倒计时(一般是前端js 实现这个计时)的展示,一分钟过后再次点击获取新的信息。

8.Python 中三大框架各自的应用场景

8.1 django:

主要是用来搞快速开发的,他的亮点就是快速开发,节约成本,正常的并发量不过 10000, 如果要实现高并发的话,就要对 django 进行二次开发,比如把整个笨重的框架给拆掉,自己写 socket 实现 http 的通信,底层用纯 c,c++写提升效率,ORM 框架给干掉,自己编写封装与数据库交互的框架,因为啥呢,ORM 虽然面向对象来操作数据库,但是它的效率很低,使用外键来联系表与表之间的查询;

8.2 flask:

轻量级,主要是用来写接口的一个框架,实现前后端分离,提升开发效率,Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展 Flask-Mail,用户认证 Flask-Login),都需要用第三方的扩展来实现。比如可以用 Flask-extension 加入 ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。
其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。Python 最出名的框架要数 Django,此外还有 Flask、Tornado 等框架。虽然 Flask 不是最出名的框架,但是 Flask 应该算是最灵活的框架之一,这也是 Flask 受到广大开发者喜爱的原因。

8.3 Tornado:

Tornado 是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado是实时 Web 服务的一个 理想框架。

9.django 如何提升性能(高并发)

对一个后端开发程序员来说,提升性能指标主要有两个一个是并发数,另一个是响应时间网站性能的优化一般包括 web 前端性能优化,应用服务器性能优化,存储服务器优化。
对前端的优化主要有:
(1)减少 http 请求,减少数据库的访问量,比如使用雪碧图。
(2)使用浏览器缓存,将一些常用的 css,js,logo 图标,这些静态资源缓存到本地浏览器,通过设置 http 头中的 cache-control 和 expires 的属性,可设定浏览器缓存,缓存时间可以自定义。
(3)对 html,css,javascript 文件进行压缩,减少网络的通信量。

个人思考的优化主要是以下几个方面:
(1)合理的使用缓存技术,对一些常用到的动态数据,比如首页做一个缓存,或者某些常用的数据做个缓存,设置一定得过期时间,这样减少了对数据库的压力,提升网站性能。
(2)使用 celery 消息队列,将耗时的操作扔到队列里,让 worker 去监听队列里的任务,实现异步操作,比如发邮件,发短信。
(3)就是代码上的一些优化,补充:nginx 部署项目也是项目优化,可以配置合适的配置参数,提升效率,增加并发量。
(4)如果太多考虑安全因素,服务器磁盘用固态硬盘读写,远远大于机械硬盘,这个技术现在没有普及,主要是固态硬盘技术上还不是完全成熟, 相信以后会大量普及。
(5)另外还可以搭建服务器集群,将并发访问请求,分散到多台服务器上处理。
(6)最后就是运维工作人员的一些性能优化技术了。

10.restful api 的理解

REST:Representational State Transfer 的缩写,翻译:“具象状态传输”。一般解释为“表现层状态转换”。

REST 是设计风格而不是标准。是指客户端和服务器的交互形式。我们需要关注的重点是如何设计REST 风格的网络接口。

REST 的特点:
(1)具象的。一般指表现层,要表现的对象就是资源。比如,客户端访问服务器,获取的数据就是资源。比如文字、图片、音视频等。
(2)表现:资源的表现形式。txt 格式、html 格式、json 格式、jpg 格式等。浏览器通过 URL 确定资源的位置,但是需要在 HTTP 请求头中,用 Accept 和 Content-Type 字段指定,这两个字段是对资源表现的描述。
(3)状态转换:客户端和服务器交互的过程。在这个过程中,一定会有数据和状态的转化,这种转化叫做状态转换。其中,GET 表示获取资源,POST 表示新建资源,PUT 表示更新资源,DELETE 表示删除资源。HTTP 协议中最常用的就是这四种操作方式。

RESTful 架构:
(1)每个 URL 代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个 http 动词,对服务器资源进行操作,实现表现层状态转换。

11.什么是 csrf 攻击原理?如何解决?

简单来说就是: 你访问了信任网站 A,然后 A 会用保存你的个人信息并返回给你的浏览器一个cookie,然后呢,在 cookie 的过期时间之内,你去访问了恶意网站 B,它给你返回一些恶意请求代码, 要求你去访问网站 A,而你的浏览器在收到这个恶意请求之后,在你不知情的情况下,会带上保存在本地浏览器的 cookie 信息去访问网站 A,然后网站 A 误以为是用户本身的操作,导致来自恶意网站 C 的攻击代码会被执行:发邮件,发消息,修改你的密码,购物,转账,偷窥你的个人信息,导致私人信息泄漏和账户财产安全收到威胁

服务端的防御方式:

  • 验证HTTP Referer字段。

  • 在请求地址中添加token并验证

  • 在HTTP头中自定义属性并验证

12.cookie与session的了解

Session 采用的是在服务器端保持状态的方案,而 Cookie 采用的是在客户端保持状态的方案。但是禁用 Cookie 就不能得到 Session。因为 Session 是用 Session ID 来确定当前对话所对应的服务器 Session,而 Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 SessionID,也就得不到 Session。

13.生成迁移文件和执行迁移文件的命令

python manage.py makemigrations      #生成迁移文件
python manage.py migrate             #执行迁移文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值