|
|
@@ -160,23 +160,14 @@ python manage.py inspectdb > <appname>/models.py
|
|
|
- `filter()` / `exclude()`
|
|
|
|
|
|
- `exact` / `iexact`:精确匹配/忽略大小写的精确匹配查询
|
|
|
-
|
|
|
- `contains` / `icontains` / `startswith / istartswith / endswith / iendswith`:基于`like`的模糊查询
|
|
|
-
|
|
|
- `in`:集合运算
|
|
|
-
|
|
|
- `gt` / `gte` / `lt` / `lte`:大于/大于等于/小于/小于等于关系运算
|
|
|
-
|
|
|
- `range`:指定范围查询(SQL中的`between…and…`)
|
|
|
-
|
|
|
- `year` / `month` / `day` / `week_day` / `hour` / `minute` / `second`:查询时间日期
|
|
|
-
|
|
|
- `isnull`:查询空值(`True`)或非空值(`False`)
|
|
|
-
|
|
|
- `search`:基于全文索引的全文检索
|
|
|
-
|
|
|
- `regex` / `iregex`:基于正则表达式的模糊匹配查询
|
|
|
-
|
|
|
- `aggregate()` / `annotate()`
|
|
|
|
|
|
- `Avg` / `Count` / `Sum` / `Max` / `Min`
|
|
|
@@ -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特性。
|
|
|
|
|
|
@@ -356,7 +347,7 @@ python manage.py inspectdb > <appname>/models.py
|
|
|
|
|
|
4. 如果使用`url`函数捕获的路径参数都是字符串,`path`函数可以指定路径参数类型。
|
|
|
|
|
|
-5. 可以使用`include`函数引入其他URL配置,捕获的参数会向下传递。
|
|
|
+5. 可以使用`include`函数引入其他URL配置并指定`namespace`来解决命名冲突,捕获的参数会向下传递。
|
|
|
|
|
|
6. 在`url`和`path`函数甚至是`include`函数中都可以用字典向视图传入额外的参数,如果参数与捕获的参数同名,则使用字典中的参数。
|
|
|
|
|
|
@@ -488,7 +479,9 @@ python manage.py inspectdb > <appname>/models.py
|
|
|
- 向浏览器传输二进制数据。
|
|
|
|
|
|
```Python
|
|
|
- buffer = ByteIO()
|
|
|
+ from io import BytesIO
|
|
|
+
|
|
|
+ buffer = BytesIO()
|
|
|
|
|
|
resp = HttpResponse(content_type='...')
|
|
|
resp['Content-Disposition'] = 'attachment; filename="..."'
|
|
|
@@ -496,13 +489,16 @@ python manage.py inspectdb > <appname>/models.py
|
|
|
```
|
|
|
|
|
|
```Python
|
|
|
+ from io import BytesIO
|
|
|
+
|
|
|
+ import xlwt
|
|
|
+
|
|
|
+
|
|
|
def get_style(name, color=0, bold=False, italic=False):
|
|
|
- style = xlwt.XFStyle()
|
|
|
font = xlwt.Font()
|
|
|
- font.name = name
|
|
|
- font.colour_index = color
|
|
|
- font.bold = bold
|
|
|
- font.italic = italic
|
|
|
+ font.name, font.colour_index, font.bold, font.italic = \
|
|
|
+ name, color, bold, italic
|
|
|
+ style = xlwt.XFStyle()
|
|
|
style.font = font
|
|
|
return style
|
|
|
|
|
|
@@ -535,7 +531,6 @@ python manage.py inspectdb > <appname>/models.py
|
|
|
# 如果文件名有中文需要处理成百分号编码
|
|
|
resp['content-disposition'] = 'attachment; filename="detail.xls"'
|
|
|
return resp
|
|
|
-
|
|
|
```
|
|
|
|
|
|
- 大文件的流式处理:`StreamingHttpResponse`。
|
|
|
@@ -1089,13 +1084,13 @@ LOGGING = {
|
|
|
|
|
|
#### 使用djangorestframework
|
|
|
|
|
|
-安装djangorestfrmework(为了描述方便,以下统一简称为drf)。
|
|
|
+安装djangorestfrmework(为了描述方便,以下统一简称为DRF)。
|
|
|
|
|
|
```Shell
|
|
|
pip install djangorestframework
|
|
|
```
|
|
|
|
|
|
-配置drf。
|
|
|
+配置DRF。
|
|
|
|
|
|
```Python
|
|
|
INSTALLED_APPS = [
|
|
|
@@ -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
|
|
|
class APIView(View):
|
|
|
@@ -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
|
|
|
REST_FRAMEWORK = {
|
|
|
@@ -2011,7 +2006,6 @@ def chrome():
|
|
|
def test_baidu_index(chrome):
|
|
|
chrome.get('https://www.baidu.com')
|
|
|
assert chrome.title == '百度一下,你就知道'
|
|
|
-
|
|
|
```
|
|
|
|
|
|
除了Selenium之外,还有一个Web自动化测试工具名叫Robot Framework。
|
|
|
@@ -2243,7 +2237,7 @@ TOTAL 267 176 34%
|
|
|
sysbench --test=memory --num-threads=512 --memory-block-size=256M --memory-total-size=32G run
|
|
|
```
|
|
|
|
|
|
-4. jmeter
|
|
|
+4. JMeter
|
|
|
|
|
|
请查看[《使用JMeter进行性能测试》](https://www.ibm.com/developerworks/cn/java/l-jmeter/index.html)。
|
|
|
|
|
|
@@ -2493,9 +2487,6 @@ TOTAL 267 176 34%
|
|
|
[mysqld]
|
|
|
slow_query_log=ON
|
|
|
slow_query_log_file=/usr/local/mysql/data/slow.log
|
|
|
- long_query_time=1
|
|
|
+ long_query_time=1。
|
|
|
```
|
|
|
|
|
|
-#### 其他
|
|
|
-
|
|
|
-请参考《Python性能调优》。
|