Django Web应用开发实战附录A
Django面试题
1.Python解释器有哪些类型,有什么特点?
CPython:由C语言开发,而且使用范围最广泛
IPython:基于CPython的一个交互式计时器
PyPy:提高执行效率,采用JIT技术。对Python代码进行动态编译
JPython:运行在Java上的解释器,直接把Python代码编译成Java字节码执行
IronPython:运行在微软.MET平台上的解释器,把Python编译成.NET的字节码
2.什么是PEP8?
《Pyhon Enhancement Proposal》(8号Python增强提案)又叫PEP8,它是针对Python代码格式而编订的编写规范指南,可以在Pycharm配置Autopep8模块,将代码自动调整为PEP8风格。
3.什么是Python之禅?
在Python交互模式下,输入import this语句可以获取具体的内容,它告诉大家如何写出高效整洁的代码。
4.使用json模式将字典转换成JSON格式,默认将中文转换成unicode,如何将中文保持不变?
import json
a = json.dumps({"name": "张三"}, ensure_ascii=False)
print(a)
5.如何输出1-100的所有偶数?
# 方法1
[i for i in range(1, 101) if i % 2 == 0] # 方法2
list(range(2, 101, 2))
6.Python的数据类型如何相互转换?
数据类型可以使用str、list、tuple、dict和eval实现转换,但转换的数据格式必须符合数据格式要求,比如字符串"{'a':1}"只能转换为字典类型,不能转化为元组或列表。
7.数据库Redis有哪些基本类型?
Redis支持5种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)及zset(sorted set有序集合)
8.数据库事务是什么?
数据库事务指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执。行简单滴说,事务就是并发控制的单位,是用户定义一个操作序列。而一个逻辑工作单元要成为事务就必须满足ACID属性:
A:原子性(Atomicity),事务中的操作要么都不做,要么全做。
C:一致性(Consistency):事务执行的结果必须使数据从一个一致性状态转换到另一个一致性状态。
I:隔离性(Isolation),一个事务的执行不能被其他事务干扰。
D:持久性(Durability),一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
9.函数装饰器有什么作用?举例说明。
装饰器就是一个函数,它可以在不需要做任何代码变动的前提下给下一个函数增加额外功能,启动装饰的效果。它经常用于有切面需求的场景,比如插入日志、性能测试、事务处理、缓存、权限校验等场景。
10.什么是metaclass?它有什么应用场景?
metaclass即元类,它是创建类的类,所有的类都是由元类调用new方法创建的,重写元类可以自由控制创建类的过程,比如使用元类创建单例模式或ORM框架,Django的ORM框架实现原理是通过重写元类实现的。
11.列举Django中间件常用的钩子函数以及中间件的应用场景。
__init__():初始化函数,运行Django将自动执行该函数
process_request():完成请求对象的创建,但用户访问的网站尚未与网站的路由地址匹配。
process_view():完成用户访问的网址与网站路由的匹配,但尚未执行视图函数。
process_exception():在执行视图函数期间发生异常,比如代码异常、主动抛出404异常等。
process_response():完成视图的执行,但尚未将响应内容返回浏览器。
中间件不能满足复杂的开发需求,还能减少视图函数或视图类的代码量,比如编写Cookie内容实现反爬机制、微信公众号开发商城等
12.简述Django的生命周期。
生命周期是从用户发送HTTP请求到网站响应的过程,整个过程包含:发送HTTP请求-->Nginx-->uwsgi-->中间件-->路由-->视图-->ORM-->从ORM获取数据返回视图-->视图将数据传递给模板文件-->中间件-->uwsgi-->Nginx-->生成响应内容。
13.简述什么是FBV和CBV
使用视图函数处理HTTP请求,即在视图里定义def函数,这种方式称为FBV(Function Based Views)在无需知道大量代码的情况下,快速完成数据视图的开发,这种累的形式实现响应与请求处理称为CBV(Class Based Views)。
14.select_related 和 prefetch_related的区别是什么?
select_related通过多数据表关系关联查询,一次性获得所有数据,只执行一次SQL查询;
prefetch_related分别查询每个表,然后根据它们之间的关系进行处理,执行了两次查询。
15.列举Django编写SQL语句的方法。
Django提供3种方法执行SQL语句,extra、raw、execute
16.模型的外键字段参数on_delete有什么作用?
用于设置数据的删除模式,删除模型包括:CASCADE、PROTECT、SET_NULL、SET_DEFAULT
17.ORM的only 和 defer的区别是什么?
# only只查询部分模型字段,defer查询指定字段之外的字段。
User.objects.all().only("id", "name", "age") # 查询这3个字段
User.objects.all().defer("name") # 查询name字段外的所有字段
18.简述Django的values 和 values_list的区别。
values将查询结果以列表表示,列表的每个元素以字典格式表示,每个键值对代表一个模型字段;
values_list以列表表示,列表每个元素以元组表示,元组每个元素代表模型字段的值。
19.简述Django中的db first 和 code first。
db first根据现有数据表结构生成相应的模型对象,使用python manage.py inspectdb指令即可生成模型对象的定义过程;
code first是编写模型对象的定义过程,由模型对象创建相应的数据表,依次执行makemigrations和migrate指令。
20.阐述Django中中CSRF实现原理。
(1)在用户访问网站时,Django在网页表单中生成隐藏控件csrfmiddlewaretoken,控件属性value的值是由Django随机生成。
(2)当用户提交表单时,Django校验表单的csrfmiddlewaretoken与资金保存的是否一致,用来判断当前请求是否合法。
(3)如果用户被CSRF攻击并从其他地方发起攻击请求,由于其他地方不知道Django在网页表单中生成隐藏控件csrfmiddlewaretoken的值,因此后台校验Django在网页表单中生成隐藏控件csrfmiddlewaretoken失败,攻击就被成功防御。
21.Django有哪些缓存方式?
Django提供5中不同的缓存方式:Memcached、数据库缓存、文件系统缓存、本地内存缓存和虚拟缓存。
22.Django如何实现WebSocket?
官方推荐使用Channels。Channels通过将HTTP协议升级为WebSocket协议,保证实时通信。也就是说,完全可以使用Channels实现实时通信,而不是使用长轮询和计时器方式来保证伪实时通信。Channels通过改造Django框架,使Django既支持HTTP协议又支持WebSocket协议。
23.简述Cookie 和 Session的区别
Cookie是从浏览器向服务器发送的数据,让服务器能够识别当前用户,而服务器对Cookie的识别机制是通过Session实现的,Session存储了当前用户基本信息。由于Cookie是存储在浏览器中的,就跟容易泄露用户信息,并且Cookie大小不能超过4kb,不支持中文。因此,需要一种机制在服务器的某个域中存储用户数据,这个域就是Session。
24.Django本身提供runserver,为什么不能用来部署(runserver与uWSGI的区别)?
runserver是调试Django时经常用到的方式,它使用Django自带的WSGI Server运行。只要在开发测试中使用,并且runserver开启方式是单进程的。
uWSGI是一种Web服务器它实现了WSGI、uwsgi、HTTP等协议。uwsgi是一种通信协议,而uWSGI是实现uwsgi和WSGI协议的Web服务器。
uWSGI具体超快的性能、低内存占用等优点,并且搭配着Nginx组成项目的生产环境,能够将用户访问请求与应用隔离,实现真正的网站部署。相对来说,这种方式支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
25.什么是跨域访问?Django如何解决跨域访问?
跨域访问指的是浏览器不能执行其他网站的JavaScript脚本,它是由浏览器的同源策略造成的,这是浏览器对JavaScript施加的安全限制。
解决跨域访问有多种方式,目前最佳的解决方案是使用第三方功能应用Django Cors Headers。
Django Web应用开发实战附录A的更多相关文章
- 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码
在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...
- 微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战
微软实战训练营 上海交大(A)实验班.(X)重点班 内部课程资料 链接:http://pan.baidu.com/s/1jGsTjq2 password:0wmf <微软实战训练营(X)重点班第 ...
- Web前端开发实战6:CSS实现导航菜单结合二级下拉式菜单的简单变换
前面几篇博文都在讲导航菜单和二级下拉式菜单,事实上有非常多方法都能够实现的.详细的情况还要视情况而定. 在后面学习到jQuery框架之后,会有更丰富的动画效果.因为在学习Ajax和jQuery的初步阶 ...
- Java Web整合开发实战:基于Struts 2+Hibernate+Spring 目录
第1篇 Java Web开发基础第1章 Web的工作机制( 教学视频:31分钟) 1.1 理解Web的概念 1.1.1 Web的定义 1.1.2 Web的三个核心标准 1.2 C/S与B/S两种软件体 ...
- Django Web接口开发
什么是接口 接口一般来讲分为两种: (1)程序内部的接口:方法与方法.模块与模块之间的交互,程序内部抛出的接口,如登录发帖,发帖就必须要登录,如果不登录不能发帖,发帖和登录这两个模块之间就要有交互,就 ...
- Web前端开发实战1:二级下拉式菜单之CSS实现
二级下拉式菜单在各大学校站点.电商类站点.新闻类站点等大型?站点非经常见,那么它的实现原理是什么呢? 学习了Web前端开发的知识后,我们是能够实现这种功能的.复杂的都是从基础效果上加入做出来的.原理和 ...
- go语言开发教程之web项目开发实战
Golang介绍Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件 ...
- FlaskWeb开发:基于Python的Web应用开发实战
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/63/ 来源:python黑洞网,专注 ...
- 基于Python的Web应用开发实战——3 模板
要想开发出易于维护的程序,关键在于编写形式简洁且结构良好的代码. 当目前为止,你看到的示例都太简单,无法说明这一点,但Flask视图函数的两个完全独立的作用却被融合在了一起,这就产生了一个问题. 视图 ...
- 基于Python的Web应用开发实战——2 程序的基本结构
2.1 初始化 所有Flaks程序都必须创建一个程序实例. Web服务器使用一种名为Web服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所 ...
随机推荐
- 如果服务器是 PHP,并且 GET 请求可以接收到数据,但 POST 请求接收不到数据,可能是以下原因之一
如果服务器是 PHP,并且 GET 请求可以接收到数据,但 POST 请求接收不到数据,可能是以下原因之一: PHP 未正确解析 POST 请求体:PHP 需要通过 $_POST 或 php://in ...
- [第四章]ABAQUS CM插件中文手册
ABAQUS Composite Modeler User Manual(zh-CN) Dassault Systèmes, 2018 注: 源文档的交叉引用链接,本文无效 有些语句英文表达更易理解, ...
- 给react native 添加transform translateY动画报错:Transform with key of "translateY" must be a number:{translateY“:0}
初学react native,想实现一个相机扫描功能时,报错,报错描述如标题 这是我的主要逻辑代码 const fadeAnim = useRef(new Animated.Value(0)).cur ...
- 14 个 Linux 下 CPU 监控工具
01. top top是最常用的查看系统资源使用情况的工具,包括CPU.内存等等资源. 这里主要关注CPU资源. 1.1 /proc/loadavg load average取自/proc/loada ...
- BUUCTF---天干地址+甲子
题目 直接参考天干地支表作结,转ASCII flag{Goodjob}
- 【JDBC第2章】获取数据库连接
第2章:获取数据库连接 2.1 要素一:Driver接口实现类 2.1.1 Driver接口介绍 java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口.这个接口是提供给数据库厂 ...
- 【Linux】3.8 Linux磁盘分区、挂载
Linux磁盘分区.挂载 1. 分区方式 mbr分区 最多支持四个主分区 系统只能安装在主分区 扩展分区要占一个主分区 MBR最大只支持2TB,但拥有最好的兼容性 gpt分区 支持无限多个主分区(但操 ...
- C# using 别名
场景重现 当using的多个库出现类名重复的情况时... 解决办法 使用类的完全限定名称,例如: // 不需要using,避免using名称重复导致的异常 // 使用类的完全限定名称,俗称全名. Sy ...
- leetcode每日一题:监控二叉树
引言 今天的每日一题原题是2643. 一最多的行,直接模拟,切除和最大的一行即可.更换成前几天遇到的更有意思的一题来写这个每日一题. 题目 968. 监控二叉树 给定一个二叉树,我们在树的节点上安 ...
- argo-cd基于Kubernetes的声明式持续部署
argo-cd基于Kubernetes的声明式持续部署 什么是argo-cd? Argo CD是一个基于Kubernetes的声明式GitOps持续交付工具. 为什么CD ? 应用程序定义.配置和环境 ...