Django 项目中可以会问到的点
写在前面
在面试后台岗位的过程中,对于简历上写的 班牌Django项目,面试官可能会比较关心的几个点,我们进行一下总结。
1. 注册登录接口的实现
这里主要说,注册登录接口中,关于密码加密的部分。
为了避免密码是明文,所以要加密存储到数据库中,这里当然可以有多种方法,Django 中给定了一些内置的加密方法,比如 hashlib库,可以实现一个加密的函数。
# 一个hash加密函数
def hash_code(s, salt='mysite'):
h = hashlib.sha256()
s += salt
h.update(s.encode())
return h.hexdigest()
然后在 register 接口 和 login 接口中都是用这个 hash_code() 函数。即在注册时,存的就是加密后的密码;在登录是,比较的就是 数据库中的ps==hash_code(input_pas)
2. 签到接口在高并发时候怎么办
这个时候就有2个方向的思路:Ngnix 反向代理来做负载均衡 / Redis 去耦合,加上缓存
2.1 Nginx 反向代理
提高Django并发性的部署方案
Nginx的介绍
总的来说,就是将 Django 部署到 Nginx + uWSGI 上面。
1. uWSGI
uWSGI 是实现了 WSGI协议的一个 WEB 服务器。用来接收客户端的请求,将请求转发到Web应用(比如这里的django application)上。
WSGI(Web service gateway interface)是 Web服务器 和 web应用通信的协议。
功能
- 进行网络协议间的转换
- 与 python application 通信
所以实际上,python + uWSGI 就可以实现功能了。但是为了处理高负载、高并发,这里要使用到 Nginx 来做反向代理、负载均衡。
2. Nginx
可以做 反向代理 的 Web 服务器。
反向代理
Nginx 放在 Web 服务器端,将 Web 请求进行分配,反向代理。
通常用 ip_hash 的负载均衡计算方法。
2.2 redis 作为缓存
可以用 redis 的 list 作为任务队列,减少对数据库的压力
3. Restful 接口
在钉钉的1面中,问到了这个 Restful 接口,当时不懂什么东西,现在大概了解一下。
3.1 产生背景
当前流行前后端分离的 web app 设计。在各种前端出现出现的基础上,需要有 统一的机制方便不同的前端和后端进行通信,这就需要 API 架构。 RESTful API是目前比较成熟的一套 API 设计理论。
3.2 个人简单理解
RESTful API 就是给你一套API怎么设计的规范,比如说
- 用api关键字来标识接口url
https://example.org/api/
这样看到 api 字眼,就明白这个url 是完成前后台数据交互的
- 将版本信息放在 url 中
https://api.example.org/v1/
https://api.example.org/v2/
- Url 中都是资源,不要出现动词
https://api.example.org/v1/animals
# 上面这个是对的
https://api.example.org/v1/delete-user
# 这个是不对的
- 过滤
通过 URL 上传参数来传递搜索条件,完成过滤。这个见过很多了。
https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
- 请求方式
GET: 从服务器获取一个资源
POST:在服务器新建一个资源
PUT:在服务器更新资源
DELETE:删除资源