Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
陌上花开7
Python-100-Days
提交
04e21dde
P
Python-100-Days
项目概览
陌上花开7
/
Python-100-Days
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python-100-Days
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
04e21dde
编写于
10月 26, 2019
作者:
J
jackfrued
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新了最后10天的文档
上级
ef20e513
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
87 addition
and
52 deletion
+87
-52
Day91-100/91.团队项目开发的问题和解决方案.md
Day91-100/91.团队项目开发的问题和解决方案.md
+14
-6
Day91-100/92.使用Docker部署应用.md
Day91-100/92.使用Docker部署应用.md
+6
-5
Day91-100/93.MySQL性能优化.md
Day91-100/93.MySQL性能优化.md
+33
-4
Day91-100/95.使用Django开发商业项目.md
Day91-100/95.使用Django开发商业项目.md
+20
-30
Day91-100/97.电商网站技术要点剖析.md
Day91-100/97.电商网站技术要点剖析.md
+14
-7
Day91-100/res/jenkins-create-admin.png
Day91-100/res/jenkins-create-admin.png
+0
-0
Day91-100/res/jenkins-unlock.png
Day91-100/res/jenkins-unlock.png
+0
-0
未找到文件。
Day91-100/91.团队项目开发的问题和解决方案.md
浏览文件 @
04e21dde
...
@@ -441,7 +441,9 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
...
@@ -441,7 +441,9 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
```
Shell
```
Shell
git switch -c release-0.1 develop
git switch -c release-0.1 develop
git push -u origin release-0.1
... ... ...
... ... ...
git pull
git commit -a -m "............"
git commit -a -m "............"
```
```
...
@@ -457,7 +459,8 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
...
@@ -457,7 +459,8 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
git push
git push
git branch -d release-0.1
git branch -d release-0.1
git tag -a v0.1 master
git push --delete release-0.1
git tag v0.1 master
git push --tags
git push --tags
```
```
...
@@ -467,8 +470,10 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
...
@@ -467,8 +470,10 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
```
Shell
```
Shell
git checkout -b hotfix-0.1.1 master
git checkout -b hotfix-0.1.1 master
git push -u origin hotfix-0.1.1
... ... ...
... ... ...
git commit -m "............"
git pull
git commit -a -m "............"
```
```
将
`hotfix`
分支合并回
`develop`
和
`master`
分支。
将
`hotfix`
分支合并回
`develop`
和
`master`
分支。
...
@@ -483,7 +488,8 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
...
@@ -483,7 +488,8 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
git push
git push
git branch -d hotfix-0.1.1
git branch -d hotfix-0.1.1
git tag -a 0.1.1
git push --delete hotfix-0.1.1
git tag v0.1.1 master
git push --tags
git push --tags
```
```
...
@@ -501,7 +507,7 @@ Git-flow流程比较容易控制各个分支的状况,但是在运用上github
...
@@ -501,7 +507,7 @@ Git-flow流程比较容易控制各个分支的状况,但是在运用上github
#### 禅道
#### 禅道
[
禅道
](
<
https://www.zentao.net/
>
)
是国产的专业项目管理软件,它不仅仅是缺陷管理工具,它提供了完整软件生命周期管理功能,支持
Scrum敏捷开发
,能够实现需求管理、缺陷管理、任务管理等一系列的功能,而且拥有强大的扩展机制和丰富的功能插件。可以从禅道的官方网站提供的
[
下载链接
](
<
https://www.zentao.net/download.html
>
)
来下载禅道,推荐使用一键安装包。
[
禅道
](
<
https://www.zentao.net/
>
)
是国产的专业项目管理软件,它不仅仅是缺陷管理工具,它提供了完整软件生命周期管理功能,支持
[
Scrum敏捷开发
](
<
http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html
>
)
,能够实现需求管理、缺陷管理、任务管理等一系列的功能,而且拥有强大的扩展机制和丰富的功能插件。可以从禅道的官方网站提供的
[
下载链接
](
<
https://www.zentao.net/download.html
>
)
来下载禅道,推荐使用一键安装包。
下面仍然以CentOS Linux为例,讲解如何利用官方提供的一键安装包来安装禅道。
下面仍然以CentOS Linux为例,讲解如何利用官方提供的一键安装包来安装禅道。
...
@@ -529,9 +535,11 @@ tar -xvf ZenTaoPMS.pro8.5.2.zbox_64.tar
...
@@ -529,9 +535,11 @@ tar -xvf ZenTaoPMS.pro8.5.2.zbox_64.tar
![](
./res/zentao-index.png
)
![](
./res/zentao-index.png
)
对敏捷开发以及敏捷闭环工具不是特别了解的,可以参考
[
《基于JIRA的Scrum敏捷开发的项目管理》
](
<
https://blog.51cto.com/newthink/1775427
>
)
一文。
#### Gitlab
#### Gitlab
一般的代码托管平台或者是我们
之前提到的Git私服Gitlab都提供了缺陷管理的功能,当我们要报告一个bug时,可以在如下图所示的界面创建一个新的问题票(issue ticket)。填写的内容包括:
常用的代码托管平台和
之前提到的Git私服Gitlab都提供了缺陷管理的功能,当我们要报告一个bug时,可以在如下图所示的界面创建一个新的问题票(issue ticket)。填写的内容包括:
1.
**[必填]**
出现问题的软件版本号、具体的使用环境(如操作系统)等相关信息。
1.
**[必填]**
出现问题的软件版本号、具体的使用环境(如操作系统)等相关信息。
2.
**[必填]**
能够稳定重现该问题的相关步骤。
2.
**[必填]**
能够稳定重现该问题的相关步骤。
...
@@ -559,7 +567,7 @@ tar -xvf ZenTaoPMS.pro8.5.2.zbox_64.tar
...
@@ -559,7 +567,7 @@ tar -xvf ZenTaoPMS.pro8.5.2.zbox_64.tar
### 持续集成
### 持续集成
为了快速的产
生高品质的软件,在团队开发中,持续集成(CI)也是一个非常重要的基础
。按照经典的软件过程模型(瀑布模型),集成的工作一般要等到所有的开发工作都结束后才能开始,但这个时候如果发现了问题,修复问题的代价是非常具体的。基本上,集成实施得越晚,代码量越大,解决问题就越困难。持续集成将版本控制、自动化构建、代码测试融入到一起,让这些工作变得自动化和可协作。由于其频繁重复整个开发流程(在指定时间内多次pull源代码并运行测试代码),所以能帮助开发者提早发现问题。
为了快速的产
出高质量的软件,在团队开发中持续集成(CI)是一个非常重要的环节。所谓CI,就是一种让计算机自动任意次重复编译、测试、汇报等工作的方法,通过CI可以帮助开发者提早发现问题,降低各种人为失误给项目带来的风险
。按照经典的软件过程模型(瀑布模型),集成的工作一般要等到所有的开发工作都结束后才能开始,但这个时候如果发现了问题,修复问题的代价是非常具体的。基本上,集成实施得越晚,代码量越大,解决问题就越困难。持续集成将版本控制、自动化构建、代码测试融入到一起,让这些工作变得自动化和可协作。由于其频繁重复整个开发流程(在指定时间内多次pull源代码并运行测试代码),所以能帮助开发者提早发现问题。
在所有的CI工具中,Jenkins和
[
TravisCI
](
<
https://www.travis-ci.org/
>
)
是最具有代表性的,前者是基于 Java的开源CI工具,后者是新晋的在线CI工具,下图是Jenkins的工作面板。
在所有的CI工具中,Jenkins和
[
TravisCI
](
<
https://www.travis-ci.org/
>
)
是最具有代表性的,前者是基于 Java的开源CI工具,后者是新晋的在线CI工具,下图是Jenkins的工作面板。
...
...
Day91-100/92.使用Docker部署应用.md
浏览文件 @
04e21dde
...
@@ -22,10 +22,11 @@ Docker属于对Linux容器技术的一种封装(利用了Linux的namespace和c
...
@@ -22,10 +22,11 @@ Docker属于对Linux容器技术的一种封装(利用了Linux的namespace和c
下面以CentOS为例讲解如何安装Docker,使用
[
Ubuntu
](
https://docs.docker.com/install/linux/docker-ce/ubuntu/
)
、
[
macOS
](
https://docs.docker.com/docker-for-mac/install/
)
或
[
Windows
](
https://docs.docker.com/docker-for-windows/install/
)
的用户可以通过点击对应的链接了解这些平台下如何进行安装。
下面以CentOS为例讲解如何安装Docker,使用
[
Ubuntu
](
https://docs.docker.com/install/linux/docker-ce/ubuntu/
)
、
[
macOS
](
https://docs.docker.com/docker-for-mac/install/
)
或
[
Windows
](
https://docs.docker.com/docker-for-windows/install/
)
的用户可以通过点击对应的链接了解这些平台下如何进行安装。
1.
确定操作系统内核版本(CentOS 7要求64位,内核版本3.10+;CentOS 6要求64位,内核版本2.6+),可以通过下面的命令确定Linux系统内核版本。
1.
确定操作系统内核版本(CentOS 7要求64位,内核版本3.10+;CentOS 6要求64位,内核版本2.6+),可以通过下面的命令确定Linux系统内核版本
并更新底层库文件
。
```
Shell
```
Shell
uname -r
uname -r
yum update
```
```
2.
在CentOS下使用yum安装Docker并启动。
2.
在CentOS下使用yum安装Docker并启动。
...
@@ -112,7 +113,7 @@ docker rmi hello-world
...
@@ -112,7 +113,7 @@ docker rmi hello-world
>
>
> 国内用户可以通过更换Ubuntu软件下载源来提升下载速度,具体请参照清华大学开源软件镜像站上的[《Ubuntu镜像使用帮助》](<https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/>)。
> 国内用户可以通过更换Ubuntu软件下载源来提升下载速度,具体请参照清华大学开源软件镜像站上的[《Ubuntu镜像使用帮助》](<https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/>)。
安装Docker后,由于直接访问
[
dockerhub
](
https://hub.docker.com/
)
下载镜像会非常缓慢,建议将服务器更换为国内镜像,可以通过修改
`/etc/docker/daemon.js`
文件来做到。一般的云服务器会有自己专属的镜像,就不需要手动修改了。
安装Docker后,由于直接访问
[
dockerhub
](
https://hub.docker.com/
)
下载镜像会非常缓慢,建议将服务器更换为国内镜像,可以通过修改
`/etc/docker/daemon.js
on
`
文件来做到。一般的云服务器会有自己专属的镜像,就不需要手动修改了。
```
JavaScript
```
JavaScript
{
{
...
@@ -125,7 +126,7 @@ docker rmi hello-world
...
@@ -125,7 +126,7 @@ docker rmi hello-world
### 使用Docker
### 使用Docker
想要玩转Docker,最简单的办法就是马上用Docker创建一些自己学习和工作中需要用到的容器,
接下来我们就
带着大家一起来创建这些容器。
想要玩转Docker,最简单的办法就是马上用Docker创建一些自己学习和工作中需要用到的容器,
下面我们
带着大家一起来创建这些容器。
#### 运行Nginx
#### 运行Nginx
...
@@ -152,7 +153,7 @@ docker container stop mynginx
...
@@ -152,7 +153,7 @@ docker container stop mynginx
然后用下面的命令重新创建容器。
然后用下面的命令重新创建容器。
```
Shell
```
Shell
docker container run -d -p 80:80 --rm --name mynginx --volume
$PWD
/html:/usr/share/nginx/html nginx
docker container run -d -p 80:80 --rm --name mynginx --volume
/root/docker/nginx
/html:/usr/share/nginx/html nginx
```
```
> 说明:上面创建容器和拷贝文件的命令中,`container`是可以省略的,也就是说`docker container run`和`docker run`是一样的,而`docker container cp`和`docker cp`是一样的。此外,命令中的`--volume`也可以缩写为`-v`,就如同`-d`是`--detach`的缩写,`-p`是`--publish`的缩写。`$PWD`代表宿主系统当前文件夹,这些对于使用过Unix或者Linux系统的人来说,应该是很容易理解的。
> 说明:上面创建容器和拷贝文件的命令中,`container`是可以省略的,也就是说`docker container run`和`docker run`是一样的,而`docker container cp`和`docker cp`是一样的。此外,命令中的`--volume`也可以缩写为`-v`,就如同`-d`是`--detach`的缩写,`-p`是`--publish`的缩写。`$PWD`代表宿主系统当前文件夹,这些对于使用过Unix或者Linux系统的人来说,应该是很容易理解的。
...
@@ -230,7 +231,7 @@ docker.io/mysql 5.7 f6509bac4980 3 weeks ago
...
@@ -230,7 +231,7 @@ docker.io/mysql 5.7 f6509bac4980 3 weeks ago
创建并运行MySQL容器。
创建并运行MySQL容器。
```
Shell
```
Shell
docker run -d -p 3306:3306 --name mysql57 -v
$PWD/mysql/conf:/etc/mysql/mysql.cnf.d -v $PWD
/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker run -d -p 3306:3306 --name mysql57 -v
/root/docker/mysql/conf:/etc/mysql/mysql.conf.d -v /root/docker
/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
```
```
> **注意**:上面创建容器时我们又一次使用了数据卷操作,那是因为通常容器是随时创建随时删除的,而数据库中的数据却是需要保留下来的。
> **注意**:上面创建容器时我们又一次使用了数据卷操作,那是因为通常容器是随时创建随时删除的,而数据库中的数据却是需要保留下来的。
...
...
Day91-100/93.MySQL性能优化.md
浏览文件 @
04e21dde
...
@@ -17,8 +17,6 @@
...
@@ -17,8 +17,6 @@
过程,通常也称之为存储过程,它是事先编译好存储在数据库中的一组SQL的集合。调用存储过程可以简化应用程序开发人员的工作,减少与数据库服务器之间的通信,对于提升数据操作的性能是有帮助的,这些我们在之前的
[
《关系型数据库MySQL》
](
../Day36-40/36-38.关系型数据库MySQL.md
)
一文中已经提到过。
过程,通常也称之为存储过程,它是事先编译好存储在数据库中的一组SQL的集合。调用存储过程可以简化应用程序开发人员的工作,减少与数据库服务器之间的通信,对于提升数据操作的性能是有帮助的,这些我们在之前的
[
《关系型数据库MySQL》
](
../Day36-40/36-38.关系型数据库MySQL.md
)
一文中已经提到过。
### 数据分区
### 数据分区
MySQL支持做数据分区,通过分区可以存储更多的数据、优化查询,获得更大的吞吐量并快速删除过期的数据。关于这个知识点建议大家看看MySQL的
[
官方文档
](
https://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html
)
。数据分区有以下几种类型:
MySQL支持做数据分区,通过分区可以存储更多的数据、优化查询,获得更大的吞吐量并快速删除过期的数据。关于这个知识点建议大家看看MySQL的
[
官方文档
](
https://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html
)
。数据分区有以下几种类型:
...
@@ -62,9 +60,40 @@ MySQL支持做数据分区,通过分区可以存储更多的数据、优化查
...
@@ -62,9 +60,40 @@ MySQL支持做数据分区,通过分区可以存储更多的数据、优化查
1.
定位低效率的SQL语句 - 慢查询日志。
1.
定位低效率的SQL语句 - 慢查询日志。
```
SQL
-
查看慢查询日志相关配置
```SQL
mysql> show variables like 'slow_query%';
+---------------------------+----------------------------------+
| Variable_name | Value |
+---------------------------+----------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /mysql/data/localhost-slow.log |
+---------------------------+----------------------------------+
```
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
```
- 修改全局慢查询日志配置。
```
SQL
mysql> set global slow_query_log='ON';
mysql> set global long_query_time=1;
```
或者直接修改MySQL配置文件启用慢查询日志。
```
INI
[mysqld]
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/slow.log
long_query_time=1
```
2. 通过`explain`了解SQL的执行计划。例如:
2. 通过`explain`了解SQL的执行计划。例如:
...
...
Day91-100/95.使用Django开发商业项目.md
浏览文件 @
04e21dde
...
@@ -160,23 +160,14 @@ python manage.py inspectdb > <appname>/models.py
...
@@ -160,23 +160,14 @@ python manage.py inspectdb > <appname>/models.py
-
`filter()`
/
`exclude()`
-
`filter()`
/
`exclude()`
- `exact` / `iexact`:精确匹配/忽略大小写的精确匹配查询
- `exact` / `iexact`:精确匹配/忽略大小写的精确匹配查询
- `contains` / `icontains` / `startswith / istartswith / endswith / iendswith`:基于`like`的模糊查询
- `contains` / `icontains` / `startswith / istartswith / endswith / iendswith`:基于`like`的模糊查询
- `in`:集合运算
- `in`:集合运算
- `gt` / `gte` / `lt` / `lte`:大于/大于等于/小于/小于等于关系运算
- `gt` / `gte` / `lt` / `lte`:大于/大于等于/小于/小于等于关系运算
- `range`:指定范围查询(SQL中的`between…and…`)
- `range`:指定范围查询(SQL中的`between…and…`)
- `year` / `month` / `day` / `week_day` / `hour` / `minute` / `second`:查询时间日期
- `year` / `month` / `day` / `week_day` / `hour` / `minute` / `second`:查询时间日期
- `isnull`:查询空值(`True`)或非空值(`False`)
- `isnull`:查询空值(`True`)或非空值(`False`)
- `search`:基于全文索引的全文检索
- `search`:基于全文索引的全文检索
- `regex` / `iregex`:基于正则表达式的模糊匹配查询
- `regex` / `iregex`:基于正则表达式的模糊匹配查询
- `aggregate()` / `annotate()`
- `aggregate()` / `annotate()`
- `Avg` / `Count` / `Sum` / `Max` / `Min`
- `Avg` / `Count` / `Sum` / `Max` / `Min`
...
@@ -268,9 +259,9 @@ python manage.py inspectdb > <appname>/models.py
...
@@ -268,9 +259,9 @@ python manage.py inspectdb > <appname>/models.py
#### 如何设计视图函数
#### 如何设计视图函数
1.
用户的每个
操作(用户故事)对应一个视图函数
。
1.
用户的每个
请求(用户故事)对应一个视图函数,当然也可以将用户要执行的业务逻辑封装到独立的函数中,也就是有专门的模块处理程序中的业务逻辑
。
2.
[
每个视图函数可以构成一个事务边界
](
https://docs.djangoproject.com/en/2.1/ref/settings/
)
。
2.
用户的请求可能会包含多个(持久化)操作,这些操作有可能需要设计成不可分割的原子性操作,那么这里就形成了事务的边界
。
-
事务的ACID特性。
-
事务的ACID特性。
...
@@ -356,7 +347,7 @@ python manage.py inspectdb > <appname>/models.py
...
@@ -356,7 +347,7 @@ python manage.py inspectdb > <appname>/models.py
4.
如果使用
`url`
函数捕获的路径参数都是字符串,
`path`
函数可以指定路径参数类型。
4.
如果使用
`url`
函数捕获的路径参数都是字符串,
`path`
函数可以指定路径参数类型。
5.
可以使用
`include`
函数引入其他URL配置,捕获的参数会向下传递。
5.
可以使用
`include`
函数引入其他URL配置
并指定
`namespace`
来解决命名冲突
,捕获的参数会向下传递。
6.
在
`url`
和
`path`
函数甚至是
`include`
函数中都可以用字典向视图传入额外的参数,如果参数与捕获的参数同名,则使用字典中的参数。
6.
在
`url`
和
`path`
函数甚至是
`include`
函数中都可以用字典向视图传入额外的参数,如果参数与捕获的参数同名,则使用字典中的参数。
...
@@ -488,7 +479,9 @@ python manage.py inspectdb > <appname>/models.py
...
@@ -488,7 +479,9 @@ python manage.py inspectdb > <appname>/models.py
-
向浏览器传输二进制数据。
-
向浏览器传输二进制数据。
```Python
```Python
buffer = ByteIO()
from io import BytesIO
buffer = BytesIO()
resp = HttpResponse(content_type='...')
resp = HttpResponse(content_type='...')
resp['Content-Disposition'] = 'attachment; filename="..."'
resp['Content-Disposition'] = 'attachment; filename="..."'
...
@@ -496,13 +489,16 @@ python manage.py inspectdb > <appname>/models.py
...
@@ -496,13 +489,16 @@ python manage.py inspectdb > <appname>/models.py
```
```
```Python
```Python
from io import BytesIO
import xlwt
def get_style(name, color=0, bold=False, italic=False):
def get_style(name, color=0, bold=False, italic=False):
style = xlwt.XFStyle()
font = xlwt.Font()
font = xlwt.Font()
font.name = name
font.name, font.colour_index, font.bold, font.italic = \
font.colour_index = color
name, color, bold, italic
font.bold = bold
style = xlwt.XFStyle()
font.italic = italic
style.font = font
style.font = font
return style
return style
...
@@ -535,7 +531,6 @@ python manage.py inspectdb > <appname>/models.py
...
@@ -535,7 +531,6 @@ python manage.py inspectdb > <appname>/models.py
# 如果文件名有中文需要处理成百分号编码
# 如果文件名有中文需要处理成百分号编码
resp['content-disposition'] = 'attachment; filename="detail.xls"'
resp['content-disposition'] = 'attachment; filename="detail.xls"'
return resp
return resp
```
```
-
大文件的流式处理:
`StreamingHttpResponse`
。
-
大文件的流式处理:
`StreamingHttpResponse`
。
...
@@ -1089,13 +1084,13 @@ LOGGING = {
...
@@ -1089,13 +1084,13 @@ LOGGING = {
#### 使用djangorestframework
#### 使用djangorestframework
安装djangorestfrmework(为了描述方便,以下统一简称为
drf
)。
安装djangorestfrmework(为了描述方便,以下统一简称为
DRF
)。
```
Shell
```
Shell
pip install djangorestframework
pip install djangorestframework
```
```
配置
drf
。
配置
DRF
。
```
Python
```
Python
INSTALLED_APPS = [
INSTALLED_APPS = [
...
@@ -1412,7 +1407,7 @@ class HouseInfoViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
...
@@ -1412,7 +1407,7 @@ class HouseInfoViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
#### 身份认证
#### 身份认证
查看
drf中APIView类的代码可以看出,drf
默认的认证方案是
`DEFAULT_AUTHENTICATION_CLASSES`
,如果修改authentication_classes就可以自行定制身份认证的方案。
查看
DRF中APIView类的代码可以看出,DRF
默认的认证方案是
`DEFAULT_AUTHENTICATION_CLASSES`
,如果修改authentication_classes就可以自行定制身份认证的方案。
```
Python
```
Python
class APIView(View):
class APIView(View):
...
@@ -1499,7 +1494,7 @@ class EstateViewSet(CacheResponseMixin, ModelViewSet):
...
@@ -1499,7 +1494,7 @@ class EstateViewSet(CacheResponseMixin, ModelViewSet):
#### 授予权限
#### 授予权限
权限检查总是在视图的最开始处运行,在任何其他代码被允许进行之前。最简单的权限是允许通过身份验证的用户访问,并拒绝未经身份验证的用户访问,这对应于dfr中的
`IsAuthenticated`
类,可以用它来取代默认的
`AllowAny`
类。权限策略可以在Django的
drf
配置中用
`DEFAULT_PERMISSION_CLASSES`
全局设置。
权限检查总是在视图的最开始处运行,在任何其他代码被允许进行之前。最简单的权限是允许通过身份验证的用户访问,并拒绝未经身份验证的用户访问,这对应于dfr中的
`IsAuthenticated`
类,可以用它来取代默认的
`AllowAny`
类。权限策略可以在Django的
DRF
配置中用
`DEFAULT_PERMISSION_CLASSES`
全局设置。
```
Python
```
Python
REST_FRAMEWORK = {
REST_FRAMEWORK = {
...
@@ -2011,7 +2006,6 @@ def chrome():
...
@@ -2011,7 +2006,6 @@ def chrome():
def test_baidu_index(chrome):
def test_baidu_index(chrome):
chrome.get('https://www.baidu.com')
chrome.get('https://www.baidu.com')
assert chrome.title == '百度一下,你就知道'
assert chrome.title == '百度一下,你就知道'
```
```
除了Selenium之外,还有一个Web自动化测试工具名叫Robot Framework。
除了Selenium之外,还有一个Web自动化测试工具名叫Robot Framework。
...
@@ -2243,7 +2237,7 @@ TOTAL 267 176 34%
...
@@ -2243,7 +2237,7 @@ TOTAL 267 176 34%
sysbench --test=memory --num-threads=512 --memory-block-size=256M --memory-total-size=32G run
sysbench --test=memory --num-threads=512 --memory-block-size=256M --memory-total-size=32G run
```
```
4.
jm
eter
4.
JM
eter
请查看
[
《使用JMeter进行性能测试》
](
https://www.ibm.com/developerworks/cn/java/l-jmeter/index.html
)
。
请查看
[
《使用JMeter进行性能测试》
](
https://www.ibm.com/developerworks/cn/java/l-jmeter/index.html
)
。
...
@@ -2493,9 +2487,6 @@ TOTAL 267 176 34%
...
@@ -2493,9 +2487,6 @@ TOTAL 267 176 34%
[mysqld]
[mysqld]
slow_query_log=ON
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/slow.log
slow_query_log_file=/usr/local/mysql/data/slow.log
long_query_time=1
long_query_time=1
。
```
```
#### 其他
请参考《Python性能调优》。
\ No newline at end of file
Day91-100/97.电商网站技术要点剖析.md
浏览文件 @
04e21dde
...
@@ -325,10 +325,11 @@ ElasticSearch既是一个分布式文档数据库又是一个高可扩展的开
...
@@ -325,10 +325,11 @@ ElasticSearch既是一个分布式文档数据库又是一个高可扩展的开
ElasticSearch的底层是开源搜索引擎
[
Lucene
](
https://lucene.apache.org/
)
,但是直接用Lucene会非常麻烦,必须自己编写代码去调用它的接口而且只支持Java语言。ElasticSearch相当于对Lucene进行了一次全面的封装,提供了REST风格的API接口,通过基于HTTP协议的访问方式屏蔽了编程语言的差异。ElasticSearch会为数据构建
[
倒排索引
](
https://zh.wikipedia.org/zh-hans/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95
)
,但是ElasticSearch内置的分词器对中文分词的支持几乎为零,因此需要通过安装elasticsearch-analysis-ik插件来提供中文分词服务。
ElasticSearch的底层是开源搜索引擎
[
Lucene
](
https://lucene.apache.org/
)
,但是直接用Lucene会非常麻烦,必须自己编写代码去调用它的接口而且只支持Java语言。ElasticSearch相当于对Lucene进行了一次全面的封装,提供了REST风格的API接口,通过基于HTTP协议的访问方式屏蔽了编程语言的差异。ElasticSearch会为数据构建
[
倒排索引
](
https://zh.wikipedia.org/zh-hans/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95
)
,但是ElasticSearch内置的分词器对中文分词的支持几乎为零,因此需要通过安装elasticsearch-analysis-ik插件来提供中文分词服务。
ElasticSearch的安装和配置可以参考
[
《ElasticSearch之Docker安装》
](
https://blog.csdn.net/jinyidong/article/details/80475320
)
。除了ElasticSearch之外,也可以使用Solr、Whoosh等来提供搜索引擎服务,基本上Django项目中可以考虑如下
两套
方案:
ElasticSearch的安装和配置可以参考
[
《ElasticSearch之Docker安装》
](
https://blog.csdn.net/jinyidong/article/details/80475320
)
。除了ElasticSearch之外,也可以使用Solr、Whoosh等来提供搜索引擎服务,基本上Django项目中可以考虑如下
几种
方案:
-
haystack(django-haystack / drf-haystack) + whoosh + Jieba
-
haystack(django-haystack / drf-haystack) + whoosh + Jieba
-
haystack (django-haystack / drf-haystack)+ elasticsearch
-
haystack (django-haystack / drf-haystack)+ elasticsearch
-
requests + elasticsearch
####安装和使用ElasticSearch
####安装和使用ElasticSearch
...
@@ -660,7 +661,10 @@ ElasticSearch的安装和配置可以参考[《ElasticSearch之Docker安装》](
...
@@ -660,7 +661,10 @@ ElasticSearch的安装和配置可以参考[《ElasticSearch之Docker安装》](
参数:
参数:
```
JSON
```
JSON
{
"analyzer": "pinyin",
"text": "张学友"
}
```
```
响应:
响应:
...
@@ -781,14 +785,17 @@ ElasticSearch的安装和配置可以参考[《ElasticSearch之Docker安装》](
...
@@ -781,14 +785,17 @@ ElasticSearch的安装和配置可以参考[《ElasticSearch之Docker安装》](
参数:
参数:
```
JSON
```
JSON
{
"query": {
"term": {
"type": ""
}
}
}
```
```
响应:
POST搜索是基于DSL的。
```
JSON
```
#### Django对接ElasticSearch
#### Django对接ElasticSearch
...
...
Day91-100/res/jenkins-create-admin.png
0 → 100644
浏览文件 @
04e21dde
147.3 KB
Day91-100/res/jenkins-unlock.png
0 → 100644
浏览文件 @
04e21dde
186.5 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录