├── .gitignore ├── .vscodeignore ├── CHANGELOG.md ├── README.md ├── images └── flask.png ├── package.json └── snippets ├── base.json ├── controls.json └── templates.json /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | vsc-* 3 | .DS_Store/ 4 | flask-snippets-* -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | vsc-* 3 | .DS_Store/ 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to the "flask-snippets" extension will be documented in this file. 3 | 4 | ## [0.1.3] 5 | 6 | - Merged PR #15 7 | ## [0.1.2] 8 | - Merged some PRs. Many thanks for all contributors! 9 | 10 | ## [0.1.1] 11 | - Merged some PRs 12 | 13 | ## [0.0.4] 14 | - Merged PR 15 | 16 | ## [0.0.4] 17 | - Added abbreviations list with description on README file 18 | 19 | ## [0.0.3] 20 | - [flask-snippets](https://github.com/jleonra/flask-snippets) ported from Atom 21 | - Splitting snippets into category files 22 | 23 | ## [0.0.2] 24 | - public repo on [GitHub](https://github.com/cstrap/flask-snippets), feel free to contribute! :-) 25 | 26 | ## [0.0.1] 27 | - Initial release 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flask snippets 2 | 3 | Flask snippets collections. 4 | Initially ported from PyCharm, TextMate, SublimeText and other editors/IDEs. 5 | 6 | If you'd like to contribute, feel free to [submit a pull request on github](https://github.com/cstrap/flask-snippets) 7 | 8 | Thanks! 9 | 10 | ## Features 11 | 12 | ### Base snippets 13 | 14 | | Abbreviation | Description | 15 | |--------------|----------------------------| 16 | | hw | Flask hello world | 17 | | route | Flask route | 18 | | routegp | Flask route with GET, POST | 19 | | routep | Flask route POST only | 20 | 21 | ### Controls snippets 22 | 23 | | Abbreviation | Description | 24 | |--------------|-----------------| 25 | | """ | ML docstring | 26 | | "" | SL docstring | 27 | | fapp | Flask App | 28 | | froute | Flask route | 29 | | furl | URL generator | 30 | | fmeth | URL methods | 31 | | frt | Render template | 32 | | ftreq | Test request | 33 | | fup | Flask upload | 34 | | fsup | Secure upload | 35 | | frc | Read cookie | 36 | | fsc | Set cookie | 37 | | feh | Error handler | 38 | | flog | Flask logging | 39 | 40 | ### Templates snippets 41 | 42 | | Abbreviation | Description | 43 | |--------------|--------------------| 44 | | fexp | Flask expression | 45 | | ffilter | Flask filter | 46 | | fcomment | Flask comment | 47 | | fblock | Flask block | 48 | | fextends | Flask extends | 49 | | fself | Flask self | 50 | | fsuper | Flask super | 51 | | ffor | Flask for | 52 | | fif | Flask if | 53 | | fife | Flask ife | 54 | | felif | Flask elif | 55 | | fmacro | Flask macro | 56 | | ffb | Flask filter block | 57 | | fset | Flask set | 58 | | finclude | Flask include | 59 | | fimport | Flask import | 60 | | fautoescape | Flask autoescape | 61 | | furl | Flask url | 62 | | ftitle | Flask title | 63 | | fvar | Flask var | 64 | | fcontent | Flask content | 65 | 66 | ## Release Notes 67 | 68 | See [changelog](CHANGELOG.md) for all changes and releases. 69 | -------------------------------------------------------------------------------- /images/flask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cstrap/flask-snippets/db0a50c214b541c5514cdfcae221bdd236cd39d1/images/flask.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flask-snippets", 3 | "displayName": "flask-snippets", 4 | "description": "Flask snippets", 5 | "version": "0.1.3", 6 | "publisher": "cstrap", 7 | "icon": "images/flask.png", 8 | "engines": { 9 | "vscode": "^1.12.0" 10 | }, 11 | "categories": [ 12 | "Snippets" 13 | ], 14 | "keywords": [ 15 | "snippets", 16 | "flask", 17 | "python" 18 | ], 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/cstrap/flask-snippets.git" 22 | }, 23 | "contributes": { 24 | "snippets": [ 25 | { 26 | "language": "python", 27 | "path": "./snippets/base.json" 28 | }, 29 | { 30 | "language": "python", 31 | "path": "./snippets/controls.json" 32 | }, 33 | { 34 | "language": "html", 35 | "path": "./snippets/templates.json" 36 | } 37 | ] 38 | } 39 | } -------------------------------------------------------------------------------- /snippets/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "Flask hello world": { 3 | "prefix": "hw", 4 | "body": [ 5 | "from flask import Flask", 6 | "app = Flask(__name__)", 7 | "", 8 | "@app.route('/')", 9 | "def hello():", 10 | " return 'Hello World!'", 11 | "", 12 | "if __name__ == '__main__':", 13 | " app.run(debug=True)" 14 | ] 15 | }, 16 | "Flask route": { 17 | "prefix": "route", 18 | "body": [ 19 | "@app.route('/${1:route_name}')", 20 | "def ${2:method_name}():", 21 | " pass$0" 22 | ] 23 | }, 24 | "Flask route with GET, POST": { 25 | "prefix": "routegp", 26 | "body": [ 27 | "@app.route('/${1:route_name}', methods=['GET', 'POST'])", 28 | "def ${2:method_name}():", 29 | " pass$0" 30 | ] 31 | }, 32 | "Flask route POST only": { 33 | "prefix": "routep", 34 | "body": [ 35 | "@app.route('/${1:route_name}', methods=['POST'])", 36 | "def ${2:method_name}():", 37 | " pass$0" 38 | ] 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /snippets/controls.json: -------------------------------------------------------------------------------- 1 | { 2 | "ML docstring": { 3 | "prefix": "\"\"\"", 4 | "body": "\"\"\"${1:sumary_line}\n\nKeyword arguments:\n${2:argument} -- ${3:description}\nReturn: ${4:return_description}\n\"\"\"\n$0" 5 | }, 6 | "SL docstring": { 7 | "prefix": "\"\"", 8 | "body": "\"\"\"${1:sumary_line}\"\"\"\n$0" 9 | }, 10 | "Flask App": { 11 | "prefix": "fapp", 12 | "body": "from flask import Flask, render_template\napp = Flask(__name__)\n\n\n@app.route('${1:/}')\ndef ${2:index}():\n return render_template('${3:index}.html')\n\nif __name__ == '__main__':\n app.run(host='${4:127.0.0.1}', port=${5:8000}, debug=${6:True})\n$0 $0" 13 | }, 14 | "Flask route": { 15 | "prefix": "froute", 16 | "body": "@app.route('${1:path}')\ndef ${2:func_name}(${3:foo}):\n return render_template('${4:expression}')$0" 17 | }, 18 | "URL generator": { 19 | "prefix": "furl", 20 | "body": "url_for('${1:foo}'$2)$0" 21 | }, 22 | "URL methods": { 23 | "prefix": "fmeth", 24 | "body": "methods=['GET', 'POST']$0" 25 | }, 26 | "Render template": { 27 | "prefix": "frt", 28 | "body": "render_template('${1:page}.html', ${2:foo}=${3:bar})$0" 29 | }, 30 | "Test request": { 31 | "prefix": "ftreq", 32 | "body": "with app.test_request_context('${1:path}', method='${2:POST}'):\n\t\tassert request.path == '${1:path}'\n\t\tassert.method == '${2:POST}'\n$0" 33 | }, 34 | "Flask upload": { 35 | "prefix": "fup", 36 | "body": "@app.route('${1:/upload}', methods=['GET', 'POST'])\ndef ${2:upload_file}():\n if request.method == 'POST':\n ${3:f} = request.files['${4:the_file}']\n ${3:f}.save('${6:/path/to/save/}${4:the_file}.${5:txt}')\n$0" 37 | }, 38 | "Secure upload": { 39 | "prefix": "fsup", 40 | "body": "from werkzeug.utils import secure_filename\n\n@app.route('${1:/upload}', methods=['GET', 'POST'])\ndef ${2:upload_file}():\n if request.method == 'POST':\n ${3:f} = request.files['${4:the_file}']\n ${3:f}.save('${5:/path/to/save/}' + secure_filename(${3:f}.filename))$0" 41 | }, 42 | "Read cookie": { 43 | "prefix": "frc", 44 | "body": "${1:foo} = request.cookies.get$('${2:key}')\n$0" 45 | }, 46 | "Set cookie": { 47 | "prefix": "fsc", 48 | "body": "${1:foo} = make_response(${2:expression})\n${1:foo}.set_cookie('${3:key}', '${4:value}')\nreturn ${1:foo}\n$0" 49 | }, 50 | "Error handler": { 51 | "prefix": "feh", 52 | "body": "@app.errorhandler(${1:404})\ndef ${2:bar}(error):\n return render_template('${3:error.html}'), ${1:404}\n$0" 53 | }, 54 | "Flask logging": { 55 | "prefix": "flog", 56 | "body": "app.logger.${1:debug}(\"${2:A message}\")\n$0" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /snippets/templates.json: -------------------------------------------------------------------------------- 1 | { 2 | "Flask expresion": { 3 | "prefix": "fexp", 4 | "body": "{{ ${1:foo.bar} }}$0" 5 | }, 6 | "Flask filter": { 7 | "prefix": "ffilter", 8 | "body": "{{ ${1:foo.bar}|${2:filter} }}$0" 9 | }, 10 | "Flask comment": { 11 | "prefix": "fcomment", 12 | "body": "{# \n\t${1:comment} \n#}$0" 13 | }, 14 | "Flask block": { 15 | "prefix": "fblock", 16 | "body": "{% ${1:block} ${2:foo} %}$3{% end${1:block} %}\n$0" 17 | }, 18 | "Flask extends": { 19 | "prefix": "fextends", 20 | "body": "{% extends ${1:layout_template} %}\n\n$0" 21 | }, 22 | "Flask self": { 23 | "prefix": "fself", 24 | "body": "{{ self.${1:block_name}() }}$0" 25 | }, 26 | "Flask super": { 27 | "prefix": "fsuper", 28 | "body": "{{ self.super() }}$0" 29 | }, 30 | "Flask for": { 31 | "prefix": "ffor", 32 | "body": "{% for ${1:element} in ${2:collection} %}\n\t\t$3{{ ${1:element}|e }}$4\n{% endfor %}\n$0" 33 | }, 34 | "Flask if": { 35 | "prefix": "fif", 36 | "body": "{% if ${1:expression} %}\n\t\t${2:blockofcode}\n{% endif %}\n$0" 37 | }, 38 | "Flask ife": { 39 | "prefix": "fife", 40 | "body": "{% if ${1:expression} %}\n\t\t${2:blockofcode}\n{% else %}\n\t\t${3:blockofcode}\n{% endif %}\n$0" 41 | }, 42 | "Flask elif": { 43 | "prefix": "felif", 44 | "body": "{% if ${1:expression} %}\n\t\t${2:blockofcode}\n{% elif ${3:expression2} %}\n\t\t${4:blockofcode}\n{% else %}\n\t\t${5:blockofcode}\n{% endif %}\n$0" 45 | }, 46 | "Flask macro": { 47 | "prefix": "fmacro", 48 | "body": "{% macro ${1:expression} -%}\n\t\t${2:blockofcode}\n{%- endmacro %}$0" 49 | }, 50 | "Flask filter block": { 51 | "prefix": "ffb", 52 | "body": "{% filter ${1:foo} %}\n\t\t${2:blockofcode}\n{% endfilter %}$0" 53 | }, 54 | "Flask set": { 55 | "prefix": "fset", 56 | "body": "{% set ${1:expression} %}$0" 57 | }, 58 | "Flask include": { 59 | "prefix": "finclude", 60 | "body": "{% include \"${1:template}\" %}$0" 61 | }, 62 | "Flask import": { 63 | "prefix": "fimport", 64 | "body": "{% import \"${1:template}\" as ${2:alias} %}\n$0" 65 | }, 66 | "Flask from import": { 67 | "prefix": "ffrom", 68 | "body": "{% from '${1:template}.html' import ${2:object} %}\n$3", 69 | "description": "flask from import" 70 | }, 71 | "Flask autoescape": { 72 | "prefix": "fautoescape", 73 | "body": "{% autoescape ${1:true} %}\n\t\t${2:blockofcode}\n{% endautoescape %}\n$0" 74 | }, 75 | "Flask url": { 76 | "prefix": "furl", 77 | "body": "{{ url_for(\"${1:template}\") }}$0" 78 | }, 79 | "Flask title": { 80 | "prefix": "ftitle", 81 | "body": "{% block title %}\n\t${1:name}\n{% endblock %}" 82 | }, 83 | "Flask var": { 84 | "prefix": "fvar", 85 | "body": "{{${1:Name var}}}" 86 | }, 87 | "Flask content block": { 88 | "prefix": "fcontent", 89 | "body": "{% block content %}\n\t${1:Some content}\n{% endblock %}" 90 | } 91 | } 92 | --------------------------------------------------------------------------------