{ "info": { "author": "zouliwei", "author_email": "330494152@qq.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "\n# KaKa\n\n\u4e00\u4e2a\u57fa\u4e8e`werkzeug`\u548c`jinja2`\u7684`web`\u6846\u67b6\uff0c\u7b80\u5355\u6613\u7528\u3001\u67b6\u6784\u6e05\u6670\u3001\u6a21\u5757\u5316\u3002\n\n## \u5feb\u901f\u5f00\u59cb\n### \u5b89\u88c5\u5e76\u5f15\u5165\n\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u5b89\u88c5KaKa:\n\n pip install KaKa\n\n\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u5c06\u6846\u67b6\u5f15\u5165\u4f60\u7684\u9879\u76ee\uff1a\n\n from kaka import KaKa\n\n### \u5b9e\u4f8b\u5316\u5e94\u7528\n\u4f7f\u7528\u5982\u4e0b\u8bed\u53e5\u5b9e\u4f8b\u5316\u4e00\u4e2a`KaKa`\u5e94\u7528\u5bf9\u8c61\uff1a\n\n app = KaKa()\n\n### \u5b9a\u4e49\u89c6\u56fe\u51fd\u6570\n\u4f7f\u7528\u5982\u4e0b\u8bed\u53e5\u5b9a\u4e49\u4e00\u4e2a\u7b80\u5355\u7684\u89c6\u56fe\u51fd\u6570\uff0c\u6b64\u51fd\u6570\u5c06\u4f1a\u63a5\u53d7`http`\u8bf7\u6c42\u5e76\u8fd4\u56de\u4e00\u4e2a\u7b80\u5355\u7684`hello world`\u5b57\u7b26\u4e32:\n\n from kaka.response import TextResponse\n\n def hello(request):\n return TextResponse('hello world')\n\n### \u5b9a\u4e49\u8def\u7531\u8868\n\u4f7f\u7528\u5982\u4e0b\u8bed\u53e5\u5b9a\u4e49\u4e00\u4e2a\u8def\u7531\u8868\u4ee5\u6307\u5bfc`http`\u8bf7\u6c42\u7684\u6b63\u786e\u8def\u7531\uff1a\n\n app.router.register([\n ('index/', hello),\n ])\n\n### \u542f\u52a8\u670d\u52a1\u5668\n\u6267\u884c\u5982\u4e0b\u8bed\u53e5\u542f\u52a8\u670d\u52a1\u5668\uff0c`KaKa`\u4f1a\u5e2e\u52a9\u6211\u4eec\u542f\u52a8\u5e95\u5c42\u7684`WSGI`\u670d\u52a1\u5668\uff0c\u9ed8\u8ba4\u5730\u5740\u662f`127.0.0.1`\uff0c\u7aef\u53e3\u53f7\u662f`8888`\uff1a\n\n app.run_server()\n\n`KaKa`\u4e3a`run_server`\u63a5\u53e3\u63d0\u4f9b\u4e86\u4e00\u4e2a`debug`\u53c2\u6570\uff0c\u9ed8\u8ba4\u503c\u662f`False`\uff0c\u82e5\u7f6e\u4e3a`True`\u5219\u4f1a\u542f\u52a8`debug`\u6a21\u5f0f\u3002\n\u5728`debug`\u6a21\u5f0f\u4e2d\uff0c\u4efb\u4f55\u5bf9\u6e90\u4ee3\u7801\u7684\u4fee\u6539\u90fd\u5c06\u81ea\u52a8\u91cd\u542f\u670d\u52a1\u5668\uff0c\u4e14\u4e00\u65e6\u53d1\u751f\u4e86\u9519\u8bef\u5c06\u4f1a\u5728\u6d4f\u89c8\u5668\u4e0a\u4ee5\u9875\u9762\u7684\u5f62\u5f0f\u663e\u793a\u51fa\u9519\u8bef\u6808\u4fe1\u606f\u3002\n\u53ef\u4ee5\u8fd9\u6837\u5f00\u542f`debug`\u6a21\u5f0f\uff1a\n\n app.run_server(debug=True)\n\n### \u9875\u9762\u5c55\u793a\n\u6253\u5f00\u6d4f\u89c8\u5668\u5e76\u8bbf\u95ee`http://127.0.0.1:8888/index/`\uff0c\u4f60\u5c06\u4f1a\u770b\u5230\u89c6\u56fe\u51fd\u6570\u8fd4\u56de\u7684`hello world`\u5b57\u7b26\u4e32\u3002\n\n---\n\n## \u529f\u80fd\u4ecb\u7ecd\u548c\u4f7f\u7528\n\n\u7136\u800c\uff0c\u4e00\u4e2a\u7b80\u5355\u7684`hello world`\u9875\u9762\u662f\u4e0d\u8db3\u4ee5\u89e3\u51b3\u6211\u4eec\u7684\u95ee\u9898\u7684\uff0c\u4e0b\u9762\u662f`KaKa`\u6846\u67b6\u76ee\u524d\u652f\u6301\u7684\u529f\u80fd\u4ecb\u7ecd\u548c\u4f7f\u7528\u8bf4\u660e\u3002\n\n### \u8def\u7531\u7cfb\u7edf\n\n#### \u5b9a\u4e49\u8def\u7531\u8868\n\n\u8def\u7531\u7cfb\u7edf\u662f`web`\u6846\u67b6\u6700\u6838\u5fc3\u7684\u529f\u80fd\u4e4b\u4e00\uff0c`KaKa`\u4f7f\u7528\u672f\u8bed`\u8def\u7531\u5668`\u548c`\u8def\u7531\u8868`\u6765\u63cf\u8ff0\u8def\u7531\u7cfb\u7edf\u3002\n`KaKa`\u7684\u8def\u7531\u7cfb\u7edf\u5e95\u5c42\u5f15\u7528\u4e86`Werkzeug`\u7684`Map`\u548c`Rule`\u6a21\u5757\u3002\n\n\u4e00\u5f20\u8def\u7531\u8868\u7531\u4e00\u4e2a\u5143\u7ec4\u5217\u8868\u8868\u793a\uff0c\u5176\u4e2d\u7684\u5143\u7ec4\u4ee3\u8868\u7740\u8def\u7531\u6761\u76ee\u4fe1\u606f\u3002\n`KaKa`\u8bbe\u5b9a\u8def\u7531\u6761\u76ee\u7531`3`\u4e2a\u53c2\u6570\u7ec4\u6210\uff1a`url, view, name`\uff0c\u5176\u4e2d`name`\u53ef\u4ee5\u4e0d\u63d0\u4f9b\u3002\n\u4f46\u82e5\u4e3a`name`\u63d0\u4f9b\u4e86\u4e00\u4e2a\u503c\uff0c\u4f60\u5c31\u53ef\u4ee5\u901a\u8fc7`reverse`\u51fd\u6570\u6765\u53cd\u5411\u89e3\u6790`url`\uff0c\u50cf\u8fd9\u6837\uff1a\n\n from kaka.utils import reverse\n\n # \u8def\u7531\u8868\n table = [\n ('index/', index_view), # \u8def\u7531\u6761\u76ee1\n ('articles/', article_view), # \u8def\u7531\u6761\u76ee2\n\n ('home/', home_view, 'home'), # \u8def\u7531\u6761\u76ee3\n ]\n\n url = reverse('home') # url\u7684\u503c\u662f: '/home/'\n\n#### \u5904\u7406\u52a8\u6001\u5143\u7d20\n\n\u5982\u679c`url`\u4e2d\u6709\u52a8\u6001\u7684\u5143\u7d20\uff0c`KaKa`\u4e5f\u53ef\u4ee5\u5904\u7406\uff0c\u52a8\u6001\u5143\u7d20\u5c06\u4f1a\u4f5c\u4e3a\u89c6\u56fe\u51fd\u6570\u7684\u53c2\u6570\u4f20\u5165\uff0c\u5c31\u50cf\u8fd9\u6837\uff1a\n\n table = [\n ('articles//', show_articles, 'article'),\n ]\n\n#### \u591a\u7ea7\u8def\u7531\n\n`KaKa`\u7684\u8def\u7531\u7cfb\u7edf\u8fd8\u652f\u6301\u591a\u7ea7\u8def\u7531\uff0c\u8fd9\u4e00\u90e8\u5206\u7684\u4ecb\u7ecd\u548c\u4f7f\u7528\u6211\u5c06\u4f1a\u653e\u5230\u4ea7\u54c1\u6587\u6863\u4e2d\u3002\n\n\n### \u89c6\u56fe\u7cfb\u7edf\n#### \u89c6\u56fe\u4f20\u53c2\n\u89c6\u56fe\u7cfb\u7edf\u662f\u5904\u7406`http`\u8bf7\u6c42\u5e76\u8fd4\u56de`http`\u54cd\u5e94\u7684\u5730\u65b9\u3002\n`KaKa`\u4e3a\u6240\u6709\u7684\u89c6\u56fe\u51fd\u6570\u63d0\u4f9b\u4e86\u4e00\u4e2a`request`\u7b2c\u4e00\u53c2\u6570\uff0c\u4ee3\u8868\u5f53\u524d\u7684\u8bf7\u6c42\u5bf9\u8c61\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u6b64\u5bf9\u8c61\u8bbf\u95ee\u6709\u5e95\u5c42\u8bf7\u6c42\u73af\u5883\u7684\u76f8\u5173\u6570\u636e\u3002\n\n#### \u54cd\u5e94\u5bf9\u8c61\n`KaKa`\u4f7f\u7528`TextResponse`\u7c7b\u6765\u5c01\u88c5\u5b57\u7b26\u4e32\u5f62\u5f0f\u7684\u8fd4\u56de\u503c\uff0c\u8fd9\u79cd\u8fd4\u56de\u503c\u7684`mimetype=text/plain`\uff0c\u6240\u4ee5\u5b83\u4e0d\u4f1a\u88ab\u6d4f\u89c8\u5668\u5f53\u505a`html`\u9875\u9762\u6e32\u67d3\uff0c\u800c\u662f\u76f4\u63a5\u6253\u5370\u5b57\u7b26\u4e32\u3002\n\u50cf\u8fd9\u6837\u4f7f\u7528\u89c6\u56fe\u7cfb\u7edf\uff1a\n\n from kaka.response import TextResponse\n\n def show_articles(request, nid):\n print(request.path)\n print(request.cookies)\n print(request.method)\n print(nid)\n\n return TextResponse('show articles view')\n\n### \u6a21\u677f\u6e32\u67d3\n#### \u6a21\u677f\u76ee\u5f55\u8bbe\u5b9a\n\u6a21\u677f\u6e32\u67d3\u529f\u80fd\u53ef\u4ee5\u8ba9\u6211\u4eec\u65b9\u4fbf\u7684\u5236\u9020\u542b\u6709\u52a8\u6001\u5143\u7d20\u7684`html`\u9875\u9762\u3002\n\u5728\u6e32\u67d3\u529f\u80fd\u4e0a\uff0c`KaKa`\u76ee\u524d\u6ca1\u6709\u505a\u592a\u591a\u4e8b\u60c5\uff0c\u4ec5\u662f\u5728\u5e95\u5c42\u5f15\u7528\u4e86`jinja2`\u6a21\u5757\u5e76\u4e3a\u6a21\u677f\u6e32\u67d3\u8fc7\u7a0b\u63d0\u4f9b\u4e86\u4e00\u5c42\u65b9\u4fbf\u8c03\u7528\u7684\u63a5\u53e3\u3002\n\u5728\u4f7f\u7528\u6e32\u67d3\u529f\u80fd\u524d\u9996\u5148\u5b9a\u4e49\u6a21\u677f\u6587\u4ef6\u76ee\u5f55\uff1a\n\n # \u8bbe\u5b9a\u6a21\u677f\u6587\u4ef6\u6240\u5728\u76ee\u5f55\n template_path = 'your template directory'\n app.render.register(template_path)\n\n#### \u6e32\u67d3\u8c03\u7528\n`KaKa`\u4e3a\u7528\u6237\u63d0\u4f9b\u4e86\u4e00\u4e2a`RenderResponse`\u54cd\u5e94\u5bf9\u8c61\uff0c\u5176\u5e95\u5c42\u8c03\u7528\u4e86`jinja2`\u7684\u6e32\u67d3\u63a5\u53e3\u3002\n\u6e32\u67d3\u7684\u7ed3\u679c\u7c7b\u578b\u5c06\u4f1a\u662f`mimetype=text/html`\uff0c\u6240\u4ee5\u6d4f\u89c8\u5668\u4f1a\u5c06\u7ed3\u679c\u5f53\u505a`html`\u9875\u9762\u6e32\u67d3\u5e76\u5c55\u793a\u3002\n\n from kaka.response import RenderResponse\n\n # \u5728\u89c6\u56fe\u51fd\u6570\u4e2d\u4f7f\u7528\u6a21\u677f\u6e32\u67d3\u529f\u80fd\n def show_articles(request, id):\n title = 'hello kaka'\n content = 'a web framework'\n\n return RenderResponse('article.html', title=title, content=content)\n\n\n### `Restful`\u652f\u6301\n\n#### `Restful`\u89c6\u56fe\u5b9a\u4e49\n\u5f53\u7136\uff0c`KaKa`\u4e5f\u652f\u6301`Restful`\u5f62\u5f0f\u7684\u8bf7\u6c42\u5904\u7406\uff0c`KaKa`\u4f7f\u7528\u4e86\u4e00\u4e2a`RestView`\u6765\u5e2e\u52a9\u5206\u53d1\u8bf7\u6c42\uff0c\u50cf\u8fd9\u6837\u5b9a\u4e49`restful`\u7684\u89c6\u56fe\u51fd\u6570\uff1a\n\n from kaka.restful import RestView\n\n # \u5b9a\u4e49restful\u5f62\u5f0f\u7684\u5904\u7406\u89c6\u56fe\uff0c\u5fc5\u987b\u4ee5\u7c7b\u7684\u5f62\u5f0f\u5b9a\u4e49\n class ArticlesView(RestView):\n def get(self, request, id):\n pass\n\n def post(self, request)\n pass\n\n ... # \u5176\u4ed6\u4e0ehttp method\u540c\u540d\u7684\u51fd\u6570\n\n#### `Restful`\u89c6\u56fe\u8def\u7531\n`restful`\u7684\u89c6\u56fe\u51fd\u6570\u53ef\u4ee5\u50cf\u8fd9\u6837\u6dfb\u52a0\u5230\u8def\u7531\u8868\u4e2d\uff1a\n\n table = [\n ('index/', index),\n ('articles/', ArticlesView.restful, 'article), # \u4f7f\u7528\u7c7b\u540d.restful\u5373\u53ef\n ]\n\n#### `Restful`\u89c6\u56fe\u54cd\u5e94\n`KaKa`\u9664\u4e86\u652f\u6301`restful`\u7684\u8bf7\u6c42\u4e4b\u5916\u8fd8\u652f\u6301`restful`\u7684\u54cd\u5e94\uff0c\u4f7f\u7528\u4e86`RestResponse`\u54cd\u5e94\u7c7b\uff0c\u5b83\u7684`mimetype=application/json`, \u6240\u4ee5\u4e00\u4e2a`restful`\u54cd\u5e94\u7684\u4f7f\u7528\u548c\u6837\u5f0f\u662f\u8fd9\u6837\u7684\uff1a\n\n from kaka.restful import RestView\n from kaka.response import RestResponse # restful\u98ce\u683c\u7684\u54cd\u5e94\u7c7b\n\n class ArticlesView(RestView):\n def get(self, request, id):\n data = {'title': 'hello kaka', 'content': 'a web framework'}\n extra_dict = {\n 'data': data,\n }\n return RestResponse(code=1200, status='success', extra_dict=extra_dict)\n\n # \u8fd9\u6837\u7684\u54cd\u5e94\u5728\u6d4f\u89c8\u5668\u4e2d\u770b\u8d77\u6765\u662f\u8fd9\u6837\u7684\uff1a\n {\n \"code\": 1200,\n \"status\": \"success\",\n \"data\": {\n \"title\": \"hello kaka\",\n \"content\": \"a web framework\"\n }\n }\n\n#### \u9ad8\u5c42`Restful`\u8c03\u7528\u63a5\u53e3\n\u5728`restful`\u7684\u652f\u6301\u4e0a\uff0c`KaKa`\u8fd8\u63d0\u4f9b\u4e86\u66f4\u9ad8\u4e00\u5c42\u7684`SUCCESS`\u548c`FAIL`\u63a5\u53e3\uff0c\u4e3a\u7528\u6237\u63d0\u4f9b\u4e86\u66f4\u52a0\u65b9\u4fbf\u7684\u64cd\u4f5c`restful`\u54cd\u5e94\u7684\u5f62\u5f0f\uff0c\u4e0d\u8fc7\u8fd9\u4e24\u4e2a\u63a5\u53e3\u7684\u4ecb\u7ecd\u548c\u4f7f\u7528\u8bf4\u660e\u6211\u5c06\u4f1a\u653e\u5230\u4ea7\u54c1\u6587\u6863\u4e2d\u3002\n\n### \u4e2d\u95f4\u4ef6\u7cfb\u7edf\n\n#### \u5904\u7406\u673a\u5236\u89e3\u91ca\n`KaKa`\u63d0\u4f9b\u4e86\u4e2d\u95f4\u4ef6\u7cfb\u7edf\uff0c\u8ba9\u7528\u6237\u53ef\u4ee5\u5728\u89c6\u56fe\u5904\u7406\u524d\u548c\u5904\u7406\u540e\u5bf9\u8bf7\u6c42(\u6216\u54cd\u5e94)\u5bf9\u8c61\u5b8c\u6210\u5fc5\u8981\u7684\u4e2d\u95f4\u64cd\u4f5c\u3002\n\u6211\u8ba4\u4e3a\u4e2d\u95f4\u4ef6\u7cfb\u7edf\u7684\u4e3b\u8981\u76ee\u7684\u662f**\u4fee\u6539**\u6d41\u7ecf\u7684\u8bf7\u6c42\u6216\u54cd\u5e94\u5bf9\u8c61\uff0c\u800c**\u4e0d\u662f\u4f2a\u9020**\u4e00\u4e2a\u65b0\u7684\u5bf9\u8c61\uff0c\u8fd9\u610f\u5473\u7740`KaKa`\u63d0\u4f9b\u7684\u4e2d\u95f4\u4ef6\u7cfb\u7edf\u7684\u5904\u7406\u673a\u5236\u662f\u8fd9\u6837\u7684\uff1a\n\n* \u89c6\u56fe\u524d\n\n `KaKa`\u7684\u4e2d\u95f4\u4ef6\u7cfb\u7edf\u5728\u89c6\u56fe\u524d\u7684\u5904\u7406\u53ea\u5141\u8bb8\u8fd4\u56de`None`\u6216\u4e00\u4e2a\u54cd\u5e94\u5bf9\u8c61(\u8fd9\u610f\u5473\u7740\u540e\u7eed\u4e2d\u95f4\u4ef6\u4e0d\u518d\u6709\u673a\u4f1a\u5904\u7406\u8bf7\u6c42\uff0c\u89c6\u56fe\u51fd\u6570\u4e5f\u662f)\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u8fd4\u56de`None`\u610f\u5473\u7740\u4e2d\u95f4\u4ef6\u4ec5\u4ec5\u5bf9\u8bf7\u6c42\u5bf9\u8c61\u6267\u884c\u4fee\u6539\u64cd\u4f5c\u800c\u4e0d\u662f\u66ff\u6362\u5b83\uff0c\u8fd4\u56de\u4e00\u4e2a\u54cd\u5e94\u5bf9\u8c61\u610f\u5473\u7740\u4e2d\u95f4\u4ef6\u62e6\u622a\u4e86\u8fd9\u4e2a\u8bf7\u6c42\u5e76\u76f4\u63a5\u8fd4\u56de\u3002\n\n* \u89c6\u56fe\u540e\n\n `KaKa`\u7684\u4e2d\u95f4\u4ef6\u7cfb\u7edf\u5728\u89c6\u56fe\u540e\u7684\u5904\u7406\u53ea\u5141\u8bb8\u8fd4\u56de`None`\uff0c\u8fd9\u610f\u5473\u7740\u4e2d\u95f4\u4ef6\u53ea\u80fd\u4fee\u6539\u54cd\u5e94\u5bf9\u8c61\u800c\u4e0d\u80fd\u66ff\u6362\u5b83\u3002\n\n*\u5173\u4e8e\u4e2d\u95f4\u4ef6\u7cfb\u7edf\u7684\u8be6\u7ec6\u8bbe\u8ba1\u601d\u8def\u548c\u7ed3\u6784\u8bf7\u53c2\u8003\u4ea7\u54c1\u6587\u6863\u3002*\n\n#### \u5b9a\u4e49\u4e2d\u95f4\u4ef6\n\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\u81ea\u5b9a\u4e49\u4e00\u4e2a\u4e2d\u95f4\u4ef6\uff1a\n\n from kaka.middlewares import AbstractMiddleWare # \u62bd\u8c61\u4e2d\u95f4\u4ef6\u7c7b\uff0c\u7528\u4e8e\u7ea6\u675f\u5904\u7406\u63a5\u53e3\n from kaka.response import TextResponse\n\n class MyMiddleWare(AbstractMiddleWare):\n def pre_process(self, request):\n print('\u5bf9\u8bf7\u6c42\u5bf9\u8c61\u505a\u5404\u79cd\u4fee\u6539\u64cd\u4f5c')\n return None\n\n # \u5982\u679c\u8981\u62e6\u622a\u5f53\u524d\u8bf7\u6c42\uff0c\u5219\u8fd9\u6837\u5199\uff1a\n # return TextResponse('\u4e2d\u95f4\u4ef6\u62e6\u622a\u8bf7\u6c42\uff0c\u76f4\u63a5\u8fd4\u56de\u54cd\u5e94\u5bf9\u8c61')\n\n def after_process(self, request, response):\n print('\u5bf9\u54cd\u5e94\u5bf9\u8c61\u505a\u5404\u79cd\u4fee\u6539\u64cd\u4f5c', response)\n return None\n\n#### \u6ce8\u518c\u4e2d\u95f4\u4ef6\n\u7136\u540e\u901a\u8fc7\u4e2d\u95f4\u4ef6\u7ba1\u7406\u5668\u6ce8\u518c\u8fd9\u4e2a\u4e2d\u95f4\u4ef6\u4ee5\u4f7f\u5176\u751f\u6548\uff1a\n\n import MyMiddleWare\n\n app.mw_manager.register([\n (5, MyMiddleWare), # priority, cls\n ])\n\u5176\u4e2d\uff0c`5`\u662f\u8868\u793a\u4f18\u5148\u7ea7\u7684\u6570\u5b57\uff0c\u6700\u5c0f\u4e3a0\uff0c\u6700\u5927\u65e0\u9650\u5236\uff0c**\u6570\u5b57\u8d8a\u5c0f\u4f18\u5148\u7ea7\u8d8a\u9ad8**\u3002\n\n\n#### \u591a\u4e2a\u4e2d\u95f4\u4ef6\u7684\u6267\u884c\u987a\u5e8f\n\u5982\u679c\u5b9a\u4e49\u4e86\u591a\u4e2a\u4e2d\u95f4\u4ef6(\u5f88\u5e38\u89c1\u7684\u60c5\u51b5)\uff0c\u5219\u5b83\u4eec\u7684\u5904\u7406\u987a\u5e8f\u662f\u8fd9\u6837\u7684\uff1a\n\n app.mw_manager.register([\n (5, MW1),\n (7, MW2),\n (9, MW3),\n ])\n\n # \u89c6\u56fe\u524d\uff1aMW1\u5904\u7406\u8bf7\u6c42 -> MW2\u5904\u7406\u8bf7\u6c42 -> MW3\u5904\u7406\u8bf7\u6c42 \n # \u89c6\u56fe\u540e\uff1aMW3\u5904\u7406\u54cd\u5e94 -> MW2\u5904\u7406\u54cd\u5e94 -> MW1\u5904\u7406\u54cd\u5e94\n\n#### \u591a\u4e2a\u4e2d\u95f4\u4ef6\u7684\u6570\u636e\u5171\u4eab\n`KaKa`\u5bf9\u8bf7\u6c42\u5bf9\u8c61\u548c\u54cd\u5e94\u5bf9\u8c61\u5747\u8bbe\u7f6e\u4e86\u4e00\u4e2a`storage`\u5c5e\u6027\u7528\u4ee5\u5171\u4eab\u6570\u636e\uff0c\u5b83\u4f7f\u7528\u8d77\u6765\u50cf\u8fd9\u6837\uff1a\n\n # \u8bf7\u6c42\u4e2d\u95f4\u4ef6\u4e2d\u7684\u4f7f\u7528\n def pre_process(self, request):\n request.storage['is_handled'] = True\n\n return None\n\n # \u89c6\u56fe\u4e2d\u7684\u4f7f\u7528\n def show_articles(request):\n print(request.storage.get('is_handled'))\n response = TextResponse('hello world')\n response.storage['name'] = 'kaka'\n\n return response\n\n # \u54cd\u5e94\u4e2d\u95f4\u4ef6\u4e2d\u7684\u4f7f\u7528\n def after_process(self, request, response):\n print(request.get('is_handled'))\n print(response.get('name'))\n\n return None\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zlw10100/kaka/", "keywords": "pip,web,framework,wsgi,restful", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "KaKa", "package_url": "https://pypi.org/project/KaKa/", "platform": "any", "project_url": "https://pypi.org/project/KaKa/", "project_urls": { "Homepage": "https://github.com/zlw10100/kaka/" }, "release_url": "https://pypi.org/project/KaKa/0.1.1/", "requires_dist": [ "Werkzeug (>=0.14.1)", "jinja2 (>=2.10)" ], "requires_python": "", "summary": "A simple and easy-to-use web framework", "version": "0.1.1" }, "last_serial": 4803103, "releases": { "0.1.0": [], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f17b2574e49e59bce94c10afa9c31ed4", "sha256": "ec6ed7ba472f26fa1b2fa1432f69cb68839f5787c79c48fc80063d3ab073f836" }, "downloads": -1, "filename": "KaKa-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f17b2574e49e59bce94c10afa9c31ed4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17058, "upload_time": "2019-02-10T19:30:52", "url": "https://files.pythonhosted.org/packages/ec/b3/029025d787f54aa53e574002a2d2ca12c232c3fbd2eca06058e7ba8dcacc/KaKa-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bdcf528d0e745e37ca1e7af26a02297a", "sha256": "fbe4c69fb398a82ccac99266be9f4d08b854572e1360c43d39ea9008bc16a184" }, "downloads": -1, "filename": "KaKa-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bdcf528d0e745e37ca1e7af26a02297a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12700, "upload_time": "2019-02-10T19:30:53", "url": "https://files.pythonhosted.org/packages/3a/23/027e0f27f3d0b7ffbd4722ccebf25d0467a638afeaa5dd1781f49e66080a/KaKa-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f17b2574e49e59bce94c10afa9c31ed4", "sha256": "ec6ed7ba472f26fa1b2fa1432f69cb68839f5787c79c48fc80063d3ab073f836" }, "downloads": -1, "filename": "KaKa-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f17b2574e49e59bce94c10afa9c31ed4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17058, "upload_time": "2019-02-10T19:30:52", "url": "https://files.pythonhosted.org/packages/ec/b3/029025d787f54aa53e574002a2d2ca12c232c3fbd2eca06058e7ba8dcacc/KaKa-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bdcf528d0e745e37ca1e7af26a02297a", "sha256": "fbe4c69fb398a82ccac99266be9f4d08b854572e1360c43d39ea9008bc16a184" }, "downloads": -1, "filename": "KaKa-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bdcf528d0e745e37ca1e7af26a02297a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12700, "upload_time": "2019-02-10T19:30:53", "url": "https://files.pythonhosted.org/packages/3a/23/027e0f27f3d0b7ffbd4722ccebf25d0467a638afeaa5dd1781f49e66080a/KaKa-0.1.1.tar.gz" } ] }