From f8057854f32a598513bf286337a37c8386a60ebb Mon Sep 17 00:00:00 2001 From: leeexing Date: Thu, 25 Oct 2018 17:26:01 +0800 Subject: [PATCH 1/3] =?UTF-8?q?:memo:=20=E5=88=A0=E9=99=A4=E4=B8=80?= =?UTF-8?q?=E4=B8=8Bpyc=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/__pycache__/api.cpython-36.pyc | Bin 376 -> 385 bytes .../app/__pycache__/main.cpython-36.pyc | Bin 352 -> 361 bytes .../apis/__pycache__/__init__.cpython-36.pyc | Bin 495 -> 504 bytes .../apis/__pycache__/user_api.cpython-36.pyc | Bin 1231 -> 1240 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/flask_restful/app/__pycache__/api.cpython-36.pyc b/flask_restful/app/__pycache__/api.cpython-36.pyc index dc063b5d0c0397bc3eafee47b86a1ed9a4e3cc9f..e6da4a3a6384d17ac249dc39583f77d08e47f3cb 100644 GIT binary patch delta 55 zcmeyt)X2xg;|=b+S976#zBe B4xa!3 diff --git a/flask_restful/app/__pycache__/main.cpython-36.pyc b/flask_restful/app/__pycache__/main.cpython-36.pyc index 9b7e9834aaaef7050544bcf36345574ab95ae248..1c6d4e227a5b76b7fcff189584b574aca2208953 100644 GIT binary patch delta 53 zcmaFB^pc6qn3tF9Qujo*oys<;Rxv)QshN4{F$I++8TolJMX3e(#hE4fMU_yIi8tE; D2|g7s delta 44 zcmaFK^ni)Yn3tDJxp5-fPATJ5s~Dfu)Xco}n1afZjQqTqf}+IalFa1PiI3U=L$?rG diff --git a/flask_restful/app/apis/__pycache__/__init__.cpython-36.pyc b/flask_restful/app/apis/__pycache__/__init__.cpython-36.pyc index 37acf79d210bf47cce3da00f9fe3f909525e97fb..e6f64c5f5448d9af50eb3f9905832673d42289b4 100644 GIT binary patch delta 55 zcmaFQ{DYazn3tF9Quju-Rz_vlRI3=D)YQzp^q7Lml8pSkn4;8z{Nl`#{Gv*z$mFGr FUH~U86xRR% delta 46 zcmeyt{GOT3n3tC;w_zh&E2ET6s#T0nYHDU)dQ3rONk)ENOhHj%a!F=#>g08dUI1m_ B5K906 diff --git a/flask_restful/app/apis/__pycache__/user_api.cpython-36.pyc b/flask_restful/app/apis/__pycache__/user_api.cpython-36.pyc index 241b73868bb1c0ebbe3afe9fe51235318cde8096..a1de25584bbbe916527137c263ffabc076984c96 100644 GIT binary patch delta 56 zcmX@ld4rS9n3tF9Quju-NlePFsa7#Qsi~QH=`jVBB^mj7F-55b`Nf$f`9+mbk Date: Thu, 25 Oct 2018 17:55:43 +0800 Subject: [PATCH 2/3] =?UTF-8?q?:bug:=20=E4=BA=86=E8=A7=A3=E5=88=B0blueprin?= =?UTF-8?q?t=E6=98=AF=E4=B8=8D=E8=83=BD=E8=B5=B7=E4=BD=9C=E7=94=A8?= =?UTF-8?q?=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apis/__pycache__/user_api.cpython-36.pyc | Bin 2388 -> 2445 bytes flask_restful/app/apis/user_api.py | 1 + flask_restful/todo.py | 12 +++++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/flask_restful/app/apis/__pycache__/user_api.cpython-36.pyc b/flask_restful/app/apis/__pycache__/user_api.cpython-36.pyc index 32aae6cfb4488119a7c7638d1d7c3584ce271de9..b57a0909648628c90fd28672a85e577a70e704ab 100644 GIT binary patch delta 644 zcmZvY%}x|S5XYzHvuD^D2|9}ju*`yj6I~?n00&~CCr%vT1ZX(W9UKD8q-QoN*Y##L z5bG6u0p%TtCleClp%Z-o<3*01>>3gXAL;b3D*vkfcXgi*_3!%6!Z0}fbh7^Wi~k4k zuiaYPcDdC9;pu2|Cj;*GK{(q?_&wkrXCI6n&{_+$>T<2>I3OBzWTL?XKF~LLgNGNL zA&*v!^bWo@XC^WP!`P3O@+x`Jt={A^+ZQ|q2fY}x z9_2KDiF!0#jaL&-^EdbxaPqxk!WuoyCzJ2{&iBo{Ilc08HrQ%3!h0WoyedBhzW@&O zy1Vdn;0b2}nLF?^J^{gm`@x#P1YQQHdBUq|VOIO&sR>{3Q(FWgyzrs3E^2#LTGu1H zqtEQ;(9)5!4@?i7H@mTAS%!_vOv)B+FECe$MP90#xGNdLVoi7(y+GfyeyMhgeuv84 zw4qnnwtmeLnAh*w)%FdvP9;^D6elCZEUvPS;7(+7h`)Sii?B(a6eQ`XZS2mbf$>xX zojwmA4zcZFJ}Mq<=sEB6PJ*g&dk48x#yiU8sHaj#(rc<9xkkIcUnJ*I>uB)5Jx-{4 zm#|Lo3D*b>M9QXeu9NzoFyjn?P5Q zD})Wgt?0Ogz=x8sO%X3dRZ?AOD&4|r?=h@+J4L-gcyDUo56p8 diff --git a/flask_restful/app/apis/user_api.py b/flask_restful/app/apis/user_api.py index 4e185bf..42b88e4 100644 --- a/flask_restful/app/apis/user_api.py +++ b/flask_restful/app/apis/user_api.py @@ -21,6 +21,7 @@ class UserListApi(Resource): users = [User("HanMeiMei"), User("LiLei")] @ns.doc('get_user_list') + @api.doc(responses={403: 'Not Authorized'}) @ns.marshal_with(user_list_model) def get(self): return { diff --git a/flask_restful/todo.py b/flask_restful/todo.py index f113504..f9ae699 100644 --- a/flask_restful/todo.py +++ b/flask_restful/todo.py @@ -3,9 +3,13 @@ api_v1 = Blueprint('api', __name__, url_prefix='/api/1') -api = Api(api_v1, version='1.0', title='Todo API', +api = Api(version='1.0', title='Todo API', description='A simple TODO API', ) +# !这种写法好像不支持了!!!什么情况不知道 +# api = Api(api_v1, version='1.0', title='Todo API', +# description='A simple TODO API', +# ) ns = api.namespace('todos', description='TODO operations') @@ -81,5 +85,7 @@ def post(self): if __name__ == '__main__': app = Flask(__name__) - app.register_blueprint(api_v1) - app.run(debug=True, port=5001) \ No newline at end of file + # api.add_namespace(ns) + # app.register_blueprint(api_v1) + api.init_app(app) + app.run(debug=True, port=5002) \ No newline at end of file From 1cbf6cb3cc8c46eb029014a002161fa86f5e6945 Mon Sep 17 00:00:00 2001 From: leeexing Date: Mon, 29 Oct 2018 09:58:47 +0800 Subject: [PATCH 3/3] =?UTF-8?q?:memo:=20=E9=98=85=E8=AF=BB<<=E7=BC=96?= =?UTF-8?q?=E5=86=99python=E7=9A=8459=E4=B8=AA=E9=AB=98=E6=95=88=E6=8A=80?= =?UTF-8?q?=E5=B7=A7>>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...11\346\225\210\346\226\271\346\263\225.md" | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 "books/\347\274\226\345\206\231\351\253\230\350\264\250\351\207\217python\344\273\243\347\240\201\347\232\20459\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225.md" diff --git "a/books/\347\274\226\345\206\231\351\253\230\350\264\250\351\207\217python\344\273\243\347\240\201\347\232\20459\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225.md" "b/books/\347\274\226\345\206\231\351\253\230\350\264\250\351\207\217python\344\273\243\347\240\201\347\232\20459\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225.md" new file mode 100644 index 0000000..a04f4fb --- /dev/null +++ "b/books/\347\274\226\345\206\231\351\253\230\350\264\250\351\207\217python\344\273\243\347\240\201\347\232\20459\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225.md" @@ -0,0 +1,59 @@ +# 摘要 + +## 有数量可变的位置参数减少视觉杂讯 + +* 在def语句中使用 *args, 即可令函数接收数量可变的位置参数 +* 调用函数时,可采用 * 操作符,把序列中的元素当成位置参数,传给该函数 +* 对生成器使用 * 操作符,可能导致程序耗尽内存并崩溃 +* 在已经接受 *args 参数的函数砂锅面继续添加位置参数,可能会产生难以排查的bug + +## 用关键字参数来表达可选的行为 + +* 位置参数必须出现在关键字参数之前 +* 函数参数可以按位置活关键字来指定 +* 只是用位置参数来调用函数,可能会导致这些参数值的含义不够明确,而关键字参数则能够阐明每个参数的意图 +* 给函数添加新的行为时,可以使用带默认值的关键字参数,以便与原有的函数调用代码保持兼容 + +## 用只能以关键字形式指定的参数来确保代码清晰 + +* 关键字参数能够使函数调用的意图更加明确 + +## 尽量用辅助类来维护程序的状态,而不要使用字典和元组 + +* 可以使用 from collections import namedtuple. 有一点像类的功能 +* 不要使用包含其他字典的字典,也不要使用过长的元组 +* 如果容器中包含简单而又不可变的数据,那么可以先使用namedtuple来表示,待稍后有需要时,再修改为完整的类 +* 保存内部状态的字典如果变得比较复杂,那么就应该把这些代码拆解为多个辅助类 + +## 简单的接口应该接受函数,而不是类的实例 + +* 对于连接各种python组件的简单接口来说,通常应该给其直接传入函数,而不是先定义某个类,然后再传入该类的实例 + +## 以 @classmethod 形式的堕胎去通用地构建对象 + +类的多态:使得继承体系中的多个类都能以各自所独有的方式来实现某个方法 + +* 在python中,每个类只能有一个构造器,也就是__init__方法 +* 通过@classmethod机制,可以用一种与构造器相仿的方式类构造类的对象 + +## 只在使用 Mix-in 组件制作工作类时进行多重继承 + + +## 多用 public 属性,少用 private 属性 + +* python 编译器无法样额保证 private 字段的私密性 +* 不要盲目的将属性设置为 private,而是应该从一开始就做好规划,并允许子类更多的访问超类的内部api + +## 继承 collections.abc 以实现自定义的容器类型 + + +## 用纯属性取代 get 和 set 方法 + +* 对于python语言来说,基本上不需要手动实现setter 或 getter 方法,而是应该从简单的 public 属性开始写 +* @property 最大的缺点在于,和属性呢相关的方法,只能在子类里面共享。而与之无关的其他类,则无法服用同一份实现代码 +* @property 方法应该遵循最小惊讶原则,而不应该产生奇怪的副作用 + +## 考虑用 @property 来代替属性重构 + + +## \ No newline at end of file