1 Django创建项目的命令:
django-admin startproject 项目名称
python manage.py startapp app名称
2Django 创建项目后,项目文件夹下的组成部分(对 mvt 的理解)?
manage.py是项目运行的入口,指定配置文件路径
__init.py 是一个空文件,作用是这个目录可以被当作包使用。
settings.py 项目整体配置文件
urls.py 是项目的路由配置文件
wsgi.py 是项目与 WSGI 兼容的 Web 服务器。
3对MVC,MTV的理解
首先;来说MVC
M: model 模型,和数据库进行交互
V: view 视图,负责产生html文件以及吧文件传到页面上
C: Controller控制器,接收请求,进行处理,与 M 和 V 进行交互,返回应答
1、 用户点击注按钮,将要注册的信息发送给网站服务器。
2、 Controller 控制器接收到用户的注册信息,Controller 会告诉 Model 层将用户的注册信息保
存到数据库
3、 Model 层将用户的注册信息保存到数据库
4、 数据保存之后将保存的结果返回给 Model 模型,
5、 Model 层将保存的结果返回给 Controller 控制器。
6、 Controller 控制器收到保存的结果之后,或告诉 View 视图,view 视图产生一个 html 页面。
7、 View 将产生的 Html 页面的内容给了 Controller 控制器。
8、 Controller 将 Html 页面的内容返回给浏览器。
9、 浏览器接受到服务器 Controller 返回的 Html 页面进行解析展示
接下来说MTV
M:Model,模型,和 MVC 中的 M 功能相同,和数据库进行交互。
V:view,视图,和 MVC 中的 C 功能相同,接收请求,进行处理,与 M 和 T 进行交互,返回应答。
T:Template,模板,和 MVC 中的 V 功能相同,产生 Html 页面
1、 用户点击注册按钮,将要注册的内容发送给网站的服务器。
2、 View 视图,接收到用户发来的注册数据,View 告诉 Model 将用户的注册信息保存进数据库。
3、 Model 层将用户的注册信息保存到数据库中。
4、 数据库将保存的结果返回给 Model
5、 Model 将保存的结果给 View 视图。
6、 View 视图告诉 Template 模板去产生一个 Html 页面。
7、 Template 生成 html 内容返回给 View 视图
8、 View 将 html 页面内容返回给浏览器。
9、 浏览器拿到 view 返回的 html 页面内容进行解析,展示。
MTV是根据MVC演变的
4. Django 中 models 利用 ORM 对 Mysql 进行查表的语句
all():返回模型类对应表格中的所有数据。
get():返回表格中满足条件的一条数据,如果查到多条数据,则抛异常:MultipleObjectsReturned,
查询不到数据,则抛异常:DoesNotExist。
filter():参数写查询条件,返回满足条件 QuerySet 集合数据
模糊查询 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)
5. exclude:返回不满足条件的数据。 -
BookInfo.objects.exclude(id=3)
聚合函数
**作用:对查询结果进行聚合操作。 -
sum count max min avg**
aggregate:调用这个函数来使用聚合。- from django.db.models import Sum,Count,Max,Min,Avg
- 例:BookInfo.objects.aggregate(Count(‘id’))
count 函数
作用:统计满足条件数据的数目。
例:统计所有图书的数目。
-
BookInfo.objects.all().count()
例:统计 id 大于 3 的所有图书的数目。 -
BookInfo.objects.filter(id__gt = 3).count()
模型类关系
一对多关系
例:图书类-英雄类
models.ForeignKey() 定义在多的类中。
2)多对多关系
例:新闻类-新闻类型类
models.ManyToManyField() 定义在哪个类中都可以。
3)一对一关系
例:员工基本信息类-员工详细信息类
models.OneToOneField() 定义在哪个类中都可以。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分
WSGI 是一种通信协议。
uwsgi 是一种线路协议而不是通信协议,在此常用于在 uWSGI 服务器与其他网络服务器的数据通信。
uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器
8. django 开发中数据库做过什么优化?(
1.设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能;
2.使用缓存,减少对数据库的访问;
3.在 orm 框架下设置表时,能用 varchar 确定字段长度时,就别用 text;
4.可以给搜索频率高的字段属性,在定义时创建索引;
5.Django orm 框架下的 Querysets 本来就有缓存的;
6.如果一个页面需要多次连接数据库,最好一次性取出所有需要的数据,减少对数据库的查询次数;
7.若页面只需要数据库里某一个两个字段时,可以用 QuerySet.values();
8.在模板标签里使用 with 标签可以缓存 Qset 的查询结果。
9. 验证码过期时间怎么设置? (2018-4-14-lxy)
将验证码保存到数据库或 session,设置过期时间为 1 分钟,然后页面设置一个倒计时(一般是前端
js 实现 这个计时)的展示,一分钟过后再次点击获取新的信息
10.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.最后就是运维工作人员的一些性能优化技术了。
状态码:
服务器向用户返回的状态码和提示信息,常用的有:
200 OK :服务器成功返回用户请求的数据
201 CREATED :用户新建或修改数据成功。
202 Accepted:表示请求已进入后台排队。
400 INVALID REQUEST :用户发出的请求有错误。
401 Unauthorized :用户没有权限。
403 Forbidden :访问被禁止。
404 NOT FOUND :请求针对的是不存在的记录。
406 Not Acceptable :用户请求的的格式不正确。
500 INTERNAL SERVER ERROR :服务器发生错误。
django 关闭浏览器,怎样清除 cookies 和 session?
以键值对的格式写会话。
- request.session[‘键’]=值
根据键读取值。 - request.session.get(‘键’,默认值)
清除所有会话,在存储中删除值部分。 - request.session.clear()
清除会话数据,在存储中删除会话的整条数据。 - request.session.flush()
- Session 依赖于 Cookie,如果浏览器不能保存 cookie 那么 session 就失效了。因为它需要浏览
器的 cookie 值去 session 里做对比。session 就是用来在服务器端保存用户的会话状态。
cookie 可以有过期时间,这样浏览器就知道什么时候可以删除 cookie 了。 如果 cookie 没有设
置过期时间,当用户关闭浏览器的时候,cookie 就自动过期了。你可以改变
Session 采用的是在服务器端保持状态的方案,而 Cookie 采用的是在客户端保持状态的方案。但
是禁用 Cookie 就不能得到 Session。因为 Session 是用 Session ID 来确定当前对话所对应的服务
器 Session,而 Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 SessionID,也
就得不到 Session。
.Django 里 QuerySet 的 get 和 filter 方法的区别?
1输入参数
get 的参数只能是 model 中定义的那些字段,只支持严格匹配。
filter 的参数可以是字段,也可以是扩展的 where 查询关键字,如 in,like 等。
2返回值
get 返回值是一个定义的 model 对象。
filter 返回值是一个新的 QuerySet 对象,然后可以对 QuerySet 在进行查询返回新的 QuerySet
对象,支持链式操作,QuerySet 一个集合对象,可使用迭代或者遍历,切片等,但是不等于 list 类型
(使用一定要注意)。
3异常
get 只有一条记录返回的时候才正常,也就说明 get 的查询字段必须是主键或者唯一约束的字段。
当返回多条记录或者是没有找到记录的时候都会抛出异常
filter 有没有匹配的记录都可以
34.生成迁移文件和执行迁移文件的命令是什么?(2018-4-16-lxy)
python manage.py makemigrations
python manage.py migrate
35.关系型数据库的关系包括哪些类型?(2018-4-16-lxy)
ForeignKey:一对多,将字段定义在多的一端中。
ManyToManyField:多对对:将字段定义在两端中。
OneToOneField:一对一,将字段定义在任意一端中。
36.查询集返回列表的过滤器有哪些?(2018-4-16-lxy)
all() :返回所有的数据
filter():返回满足条件的数据
exclude():返回满足条件之外的数据,相当于 sql 语句中 where 部分的 not 关键字
order_by():排序
37.判断查询集正是否有数据?(2018-4-16-lxy)
exists():判断查询集中否有数据,如果有则返回 True,没有则返回 False。
38.Django 本身提供了 runserver,为什么不能用来部署?(2018-4-16-lxy)
runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的 WSGI Server 运
行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。
varchar 与 char 的区别?(2018-4-16-lxy)
char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。而 varchar 则处可变长度但他
要在总长度上加 1 字符,这个用来存储位置。所以在处理速度上 char 要比 varchar 快速很多,但是对
费存储空间,所以对存储不大,但在速度上有要求的可以使用 char 类型,反之可以用 varchar 类型