{ "info": { "author": "Wu Dong ", "author_email": "wudong@eastwu.cn", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "# pre-request\n\n# \u4ecb\u7ecd\n\u9488\u5bf9Flask\u3001Tornado\u6846\u67b6\u8bbe\u8ba1\u7684\u8bf7\u6c42\u9884\u5904\u7406\u7c7b\n\n\n# \u5904\u7406\u5185\u5bb9\n1. \u683c\u5f0f\u9650\u5236\u548c\u8f6c\u6362\u5904\u7406\uff0c\u5982\u679c\u7c7b\u578b\u4e0d\u7b26\u5408\u6216\u8005\u65e0\u6cd5\u8f6c\u6362\u6210\u9700\u6c42\u7684\u7c7b\u578b\uff0c\u5219\u629b\u51fa\u9519\u8bef\n2. \u53d6\u503c\u8303\u56f4\u9650\u5236\uff0c\u663e\u793a\u53c2\u6570\u7684\u53d6\u503c\u5185\u5bb9\u7684\u8303\u56f4\n3. \u5b57\u7b26\u4e32\u8f6c\u4e49\u5904\u7406\uff0c\u9632\u6b62SQL\u6ce8\u5165\n4. \u8bf7\u6c42\u53c2\u6570\u4e3a\u7a7a\u548c\u9ed8\u8ba4\u503c\u5904\u7406\uff0c\u5982\u679c\u5141\u8bb8\u4e3a\u7a7a\u5219\u53ef\u4ee5\u8bbe\u7f6e\u9ed8\u8ba4\u503c\n5. \u7528\u6237\u53ef\u4ee5\u81ea\u5b9a\u4e49callback, \u81ea\u5df1\u5904\u7406\u4efb\u4f55\u53c2\u6570\uff08callback\u7684\u8c03\u7528\u5728\u6240\u6709filter\u5904\u7406\u4e4b\u540e\uff09\n\n# \u7528\u6cd5\n1.1 \u6e90\u7801\u5b89\u88c5\n```\ngit clone git@github.com:Eastwu5788/pre-request.git\npython setup.py install\n```\n\n1.2 PIP\u5b89\u88c5\n```\npip install pre-request\n```\n\n2. \u5bfc\u5165\u5904\u7406\u8bf7\u6c42\u53c2\u6570\u7684\u88c5\u9970\u5668\n```\n# \u5728Flask\u73af\u5883\u4e0b\nfrom pre_request.flask import filter_params\n\n# \u5728Tornado\u73af\u5883\u4e0b\nfrom pre_request.tornado import filter_params\n```\n\n\n3. \u5bfc\u5165\u53c2\u6570\u89c4\u5219\u7c7b(Flask\u3001Tornado\u901a\u7528)\n```\nfrom pre_request.filter_rules import Rule, Length\n```\n\n\n\uff14. \u8bbe\u7f6e\u8bf7\u6c42\u53c2\u6570\u89c4\u5219\n```\nfield = {\n \"age\": Rule(direct_type=int, enum=[1, 2]),\n \"name\": Rule(length=Length(6, 12)),\n \"email\": Rule(email=True),\n \"mobile\": Rule(mobile=True),\n \u00a0 \u00a0\"empty\": Rule(allow_empty=True, default=\"sssss_empty\"),\n \"range\": Rule(direct_type=int, range=Range(10, 30)),\n \"reg\": Rule(reg=r'^h\\w{3,5}o$', key_map=\"reg_exp\"),\n \"trim\": Rule(trim=True, json=True),\n \"call\": Rule(direct_type=int, callback=lambda x: x+100)\n}\n```\n\n\n\uff15. \u901a\u8fc7@filter_params()\u88c5\u9970\u5668\uff0c\u8fc7\u6ee4\u8bf7\u6c42\u53c2\u6570.\u6ce8\u610f\u5728\u6b63\u5e38\u5904\u7406\u51fd\u6570\u4e2d\u6dfb\u52a0params\u53c2\u6570\uff0c\u63a5\u6536\u8fc7\u6ee4\u540e\u7684\u8bf7\u6c42\u53c2\u6570\n```\n# \u4e0d\u6307\u5b9aget\u548cpost\u65f6\uff0c\u4e0d\u8bbaget\u8bf7\u6c42\u6216\u8005post\u8bf7\u6c42\u90fd\u4f1a\u4f7f\u7528\u540c\u4e00\u4e2a\u8fc7\u6ee4\u53c2\u6570\n# \u5982\u679c\u6307\u5b9a\u4e86get\u6216\u8005post\u65f6\uff0c\u76f4\u63a5\u8bbe\u7f6e\u7684\u8fc7\u6ee4\u53c2\u6570\u4f1a\u88ab\u8986\u76d6\n@app.route(\"/test\", methods=['get', 'post'])\n@filter_params(field)\ndef test_handler(params=None):\n return str(params)\n```\n\n\n\uff16. \u5355\u72ec\u8bbe\u7f6e\u67d0\u4e00\u4e2a\u8bf7\u6c42\u7684get\u6216post\u8bf7\u6c42\n```\n# \u5355\u72ec\u8bbe\u7f6eget\u8bf7\u6c42\u7684\u8fc7\u6ee4\u53c2\u6570\n@app.route(\"/get\", methods=['get'])\n@filter_params(get=get_field)\ndef get_handler(params=None):\n return str(params)\n\n# \u5355\u72ec\u8bbe\u7f6epost\u8bf7\u6c42\u7684\u8fc7\u6ee4\u53c2\u6570\n@app.route(\"/post\", methods=['post'])\n@filter_params(post=post_field)\ndef post_handler(params=None):\n return str(params)\n```\n\n\n\uff17. \u4e5f\u53ef\u4ee5\u540c\u65f6\u8bbe\u7f6eget\u548cpost\u8bf7\u6c42\u7684\u4e0d\u540c\u8fc7\u6ee4\u53c2\u6570\n```\n# \u540c\u65f6\u8bbe\u7f6eget\u548cpost\u7684\u8fc7\u6ee4\u53c2\u6570\n@app.route(\"/all\", methods=['get', 'post'])\n@filter_params(get=get_field, post=post_field)\ndef all_handler(params=None):\n return str(params)\n```\n\n\n\uff18. \u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\uff0c\u901a\u8fc7response\u53c2\u6570\u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\u4e3ajson\u6216\u8005html\n```\n# \u65b9\u6cd5\u89c6\u56fe\n@filter_params(get=get_field, response='json')\ndef get(self, params=None):\nreturn str(params)\n\n@filter_params(post=post_field, response='html')\ndef post(self, params=None):\nreturn str(params)\n```\n\n\n\uff19. \u4fee\u6539\u9ed8\u8ba4\u54cd\u5e94\u7c7b\u578b,\u4fee\u6539filter_response.py\u4e2d\u7684RESPONSE\u53d8\u91cf\n```\nRESPONSE = JSONResponse()\n```\n\n\n10. \u8bbe\u7f6e\u81ea\u5b9a\u4e49\u54cd\u5e94,\u4e3b\u8981\u662f\u7ee7\u627fBaseResponse\uff0c\u5177\u4f53\u5b9e\u73b0\u53ef\u4ee5\u53c2\u8003JSONResponse\u6216HTMLResponse\u7c7b\u7684\u5b9e\u73b0\n```\nclass JSONResponse(BaseResponse):\n \"\"\"\n \u4ee5JSON\u683c\u5f0f\u54cd\u5e94\u51fa\u9519\u7684\u60c5\u51b5\n \"\"\"\n def __call__(self, handler=None, error=None, request_type=None):\n \"\"\"\n :type error: \u9519\u8bef\n :param request_type: \u8bf7\u6c42\u7c7b\u578b\n :return:\n \"\"\"\n result = super(JSONResponse, self).__call__(handler, error, request_type)\n \u00a0 \u00a0 \u00a0 \u00a0# Flask\u7684\u5904\u7406\n \u00a0 \u00a0 \u00a0 \u00a0if self.request_type == RequestTypeEnum.Flask:\n from flask import make_response\n response = make_response(json.dumps(result))\n response.headers[\"Content-Type\"] = \"application/json; charset=utf-8\"\n return response\n \u00a0 \u00a0 \u00a0 \u00a0# Tornado\u7684\u5904\u7406\u3000\n \u00a0 \u00a0 \u00a0 \u00a0else:\n self.handler.set_header(\"Content-Type\", \"application/json; charset=utf-8\")\n return self.handler.write(json.dumps(result))\n```\n\n\n# Rule\u89c4\u5219\u53c2\u6570\u4ecb\u7ecd\n```\n# \u5b57\u6bb5\u76ee\u6807\u6570\u636e\u7c7b\u578b\nself.direct_type = kwargs.get(\"direct_type\", str)\n\n# \u5f53\u524d\u5b57\u6bb5\u662f\u5426\u5141\u8bb8\u4e3a\u7a7a\nself.allow_empty = kwargs.get(\"allow_empty\", False)\n# \u5f53\u524d\u5b57\u6bb5\u9ed8\u8ba4\u503c\uff0c\u5982\u679c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\uff0c\u5219\u6b21\u5b57\u6bb5\u65e0\u610f\u4e49\nself.default = kwargs.get(\"default\", None)\n# \u53bb\u9664\u524d\u540e\u7684\u7a7a\u683c\nself.trim = kwargs.get(\"trim\", False)\n\n# \u5b57\u6bb5\u679a\u4e3e\u503c\u8bbe\u7f6e\nself.enum = kwargs.get(\"enum\", list())\n# range,\u6574\u6570\u8303\u56f4\u9650\u5b9a, \u53ea\u5728direct_type\u4e3a\u6570\u5b57\u65f6\u6709\u6548\nself.range = kwargs.get(\"range\", Range())\n\n# \u6b63\u5219\u8868\u8fbe\u5f0f\nself.reg = kwargs.get(\"reg\", None)\n# Email\u5224\u65ad\nself.email = kwargs.get(\"email\", False)\n# \u624b\u673a\u53f7\u5224\u65ad\nself.mobile = kwargs.get(\"mobile\", False)\n\n# \u5b57\u7b26\u4e32\u957f\u5ea6\u5224\u65ad\nself.len = kwargs.get(\"length\", Length())\n\n# key\u6620\u5c04\nself.key_map = kwargs.get(\"key_map\", None)\n\n# \u662f\u5426\u9700\u8981\u8fdb\u884cjson\u89e3\u6790\nself.json_load = kwargs.get(\"json\", False)\n\n# \u81ea\u5b9a\u4e49\u5904\u7406callback, \u5728\u6240\u6709\u7684filter\u5904\u7406\u5b8c\u6210\u540e\uff0c\u901a\u8fc7callback\u56de\u8c03\u7ed9\u7528\u6237\u8fdb\u884c\u81ea\u5b9a\u4e49\u5904\u7406\nself.callback = kwargs.get(\"callback\", None)\n```\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/Eastwu5788/pre-request", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "pre-request", "package_url": "https://pypi.org/project/pre-request/", "platform": "", "project_url": "https://pypi.org/project/pre-request/", "project_urls": { "Homepage": "https://github.com/Eastwu5788/pre-request" }, "release_url": "https://pypi.org/project/pre-request/1.0.7/", "requires_dist": null, "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "summary": "Deal with request params for Flask and Tornado", "version": "1.0.7" }, "last_serial": 4892198, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "968df52d8b8b62bb157c2424a43d47b7", "sha256": "3cca66e657817070b6402af81276b21ea090de4cba1c88b0178a01260059fae6" }, "downloads": -1, "filename": "pre_request-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "968df52d8b8b62bb157c2424a43d47b7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10650, "upload_time": "2018-09-06T05:31:11", "url": "https://files.pythonhosted.org/packages/3d/99/27ce7d9a2d2f8578073f63100926f84b1b383ff0053732d2ee6c39eecd84/pre_request-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c41bbff7aa33e2730d7e7fdc9264aa7", "sha256": "2204aa83cf1d63c1c1afd029d1ac8eb7ee4c053d80351c55b742710eb37585ff" }, "downloads": -1, "filename": "pre_request-1.0.0.tar.gz", "has_sig": false, "md5_digest": "8c41bbff7aa33e2730d7e7fdc9264aa7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9480, "upload_time": "2018-09-06T05:31:12", "url": "https://files.pythonhosted.org/packages/b6/13/14eaf9b99c991de5dcde80a0ed2ca274ca89a558c6886f51ba2b7c69d9ad/pre_request-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "3a5d6c6c4da957300821e82a22719369", "sha256": "27a9916ff69edc8728d1a03ad26f5f75a7bd2bed575762ce3c80d7f7b1ff9d7b" }, "downloads": -1, "filename": "pre_request-1.0.1.tar.gz", "has_sig": false, "md5_digest": "3a5d6c6c4da957300821e82a22719369", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9573, "upload_time": "2018-09-12T02:27:09", "url": "https://files.pythonhosted.org/packages/d6/0d/4b888b7982c88ad4d66c776009c395030c164afbcbcc0377b3bc4ec50670/pre_request-1.0.1.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "8ee80ba2c633ced1df3d71718ab22d08", "sha256": "44d3746f79cf938792b7601a63b7b5d78e4fc31849a12e11746d6b7de5781125" }, "downloads": -1, "filename": "pre_request-1.0.30.tar.gz", "has_sig": false, "md5_digest": "8ee80ba2c633ced1df3d71718ab22d08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10496, "upload_time": "2018-11-30T04:40:56", "url": "https://files.pythonhosted.org/packages/e6/bb/115d66658f21944963a8677db1aeeaa57be5fa3998955ccd47086f69226c/pre_request-1.0.30.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "52238989ced5342d826155a4b04da25d", "sha256": "5d41fa45aa38f3c6ecaaeabd6457cef4ecb61564c8666a6bd35708e00acf1b94" }, "downloads": -1, "filename": "pre_request-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52238989ced5342d826155a4b04da25d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11339, "upload_time": "2019-01-04T07:41:22", "url": "https://files.pythonhosted.org/packages/5d/28/970fea4e904f6c7abb63fb473f64cd15ccc3960c29e97685e660ff81e062/pre_request-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab2b63feb19a6250a9cf8edf6a80d4c4", "sha256": "1ba1b0db79eb6f82b32f789574cb77304df93ff394d0b5756bbbb92d0f957879" }, "downloads": -1, "filename": "pre_request-1.0.5.tar.gz", "has_sig": false, "md5_digest": "ab2b63feb19a6250a9cf8edf6a80d4c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10831, "upload_time": "2019-01-04T07:41:24", "url": "https://files.pythonhosted.org/packages/ea/ed/38e8c835bc499a2e0cba8055471ca98ffc6566e25ed4189e828511eb61c3/pre_request-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "e6c2725451616a5ac8afa281ef4e6b7e", "sha256": "d7a4a1b61719053526da7524e9fc0583af25f94921f525ab624a7ac36d94be7b" }, "downloads": -1, "filename": "pre_request-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e6c2725451616a5ac8afa281ef4e6b7e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11351, "upload_time": "2019-01-23T00:55:22", "url": "https://files.pythonhosted.org/packages/13/ba/c33df17599b4ebddec294bf87e3ad0937160f841f3e4688b91ef423118f6/pre_request-1.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bfadacca54059bc07db87a98d4be20d0", "sha256": "5189bc2aa283ec35da0232b624d6612549b7664176444f438ecd9766fe18af5d" }, "downloads": -1, "filename": "pre_request-1.0.6.tar.gz", "has_sig": false, "md5_digest": "bfadacca54059bc07db87a98d4be20d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11639, "upload_time": "2019-01-23T00:55:23", "url": "https://files.pythonhosted.org/packages/38/8c/72dc86e814be5223d3c0dc302965313149832473c36452c6e888fa3509bc/pre_request-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "c60cffe979fd8c31291873286b038761", "sha256": "4e56742fca00221b613a864cddfebc8900beceb75b65b353d2f80e62c9daf6a5" }, "downloads": -1, "filename": "pre_request-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c60cffe979fd8c31291873286b038761", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 13655, "upload_time": "2019-03-04T00:13:48", "url": "https://files.pythonhosted.org/packages/8c/8f/59a3e3429c6f3300a8cfcb91ebaa60addc4c91457581cf5f87104640cfab/pre_request-1.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29639a18dcb924fe2f2898a7b4350254", "sha256": "5fdf6c01ba2a4f926c6e38e33a49b25ae3d2df728828b2599e8228c5b9b43678" }, "downloads": -1, "filename": "pre_request-1.0.7.tar.gz", "has_sig": false, "md5_digest": "29639a18dcb924fe2f2898a7b4350254", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 9909, "upload_time": "2019-03-04T00:13:49", "url": "https://files.pythonhosted.org/packages/bc/ac/21cb8f7542556f8858a0de43ea19f45b86cb2da6114dac0a64575ae03e11/pre_request-1.0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c60cffe979fd8c31291873286b038761", "sha256": "4e56742fca00221b613a864cddfebc8900beceb75b65b353d2f80e62c9daf6a5" }, "downloads": -1, "filename": "pre_request-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c60cffe979fd8c31291873286b038761", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 13655, "upload_time": "2019-03-04T00:13:48", "url": "https://files.pythonhosted.org/packages/8c/8f/59a3e3429c6f3300a8cfcb91ebaa60addc4c91457581cf5f87104640cfab/pre_request-1.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29639a18dcb924fe2f2898a7b4350254", "sha256": "5fdf6c01ba2a4f926c6e38e33a49b25ae3d2df728828b2599e8228c5b9b43678" }, "downloads": -1, "filename": "pre_request-1.0.7.tar.gz", "has_sig": false, "md5_digest": "29639a18dcb924fe2f2898a7b4350254", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 9909, "upload_time": "2019-03-04T00:13:49", "url": "https://files.pythonhosted.org/packages/bc/ac/21cb8f7542556f8858a0de43ea19f45b86cb2da6114dac0a64575ae03e11/pre_request-1.0.7.tar.gz" } ] }