From 7b7117ff908621a1cc5229c78870b0ccb360d877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Berlotto?= Date: Sat, 20 Feb 2021 23:51:38 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20do=20projeto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Python 3.8.5 * Pipenv * Flask na ultima versão 1.1.2 * Atualização de todas as libs * Compatibilização py3 e libs * remove create_env.sh * remove requirements.txt --- .vscode/settings.json | 3 + Pipfile | 25 +++ Pipfile.lock | 412 +++++++++++++++++++++++++++++++++++++++ README.md | 13 +- app/__init__.py | 8 +- app/configuration.py | 11 +- app/forms.py | 15 +- app/models.py | 8 +- app/templates/base.html | 83 +++++--- app/templates/index.html | 6 +- app/templates/login.html | 10 +- app/templates/new.html | 2 +- app/views.py | 25 ++- create_env.sh | 14 -- requirements.txt | 25 --- run.py | 6 - 16 files changed, 537 insertions(+), 129 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 Pipfile create mode 100644 Pipfile.lock delete mode 100755 create_env.sh delete mode 100644 requirements.txt diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c12a86c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/home/sergio/.virtualenvs/flask-app-template-b5GscEs_/bin/python" +} \ No newline at end of file diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..39a8d14 --- /dev/null +++ b/Pipfile @@ -0,0 +1,25 @@ +[[source]] +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +flask = "*" +flask-admin = "*" +flask-bootstrap = "*" +flask-cache = "*" +flask-flatpages = "*" +flask-gravatar = "*" +flask-login = "*" +flask-mail = "*" +flask-pymongo = "*" +flask-restless = "*" +flask-sqlalchemy = "*" +flask-themes = "*" +flask-uploads = "*" +flask-wtf = "*" + +[dev-packages] + +[requires] +python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..c47fe66 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,412 @@ +{ + "_meta": { + "hash": { + "sha256": "11116426af62d2eb1eb33c22e2e9af529ae0ff6863b2e804906dad24116b9009" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.8" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "blinker": { + "hashes": [ + "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6" + ], + "version": "==1.4" + }, + "click": { + "hashes": [ + "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", + "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" + ], + "version": "==7.1.2" + }, + "dominate": { + "hashes": [ + "sha256:76ec2cde23700a6fc4fee098168b9dee43b99c2f1dd0ca6a711f683e8eb7e1e4", + "sha256:84b5f71ed30021193cb0faa45d7776e1083f392cfe67a49f44e98cb2ed76c036" + ], + "version": "==2.6.0" + }, + "flask": { + "hashes": [ + "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060", + "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557" + ], + "index": "pypi", + "version": "==1.1.2" + }, + "flask-admin": { + "hashes": [ + "sha256:145f59407d78319925e20f7c3021f60c71f0cacc98e916e52000845dc4c63621" + ], + "index": "pypi", + "version": "==1.5.7" + }, + "flask-bootstrap": { + "hashes": [ + "sha256:cb08ed940183f6343a64e465e83b3a3f13c53e1baabb8d72b5da4545ef123ac8" + ], + "index": "pypi", + "version": "==3.3.7.1" + }, + "flask-cache": { + "hashes": [ + "sha256:33187b3ddceeee233fe3db68ffcc118b5498e8ad28edde711bcbdcbf4924ce35", + "sha256:90126ca9bc063854ef8ee276e95d38b2b4ec8e45fd77d5751d37971ee27c7ef4", + "sha256:ae9d1ac4549517dfbc1f178ccc5429f61f836be3cc109a0b2481c98b3711c329" + ], + "index": "pypi", + "version": "==0.13.1" + }, + "flask-flatpages": { + "hashes": [ + "sha256:591506153c66e6b1d2286b5c757b652fb14d6b9ec8e55bd4e58d1799a0bea278", + "sha256:67401f57fc3b2746cfac6ca6750cd199bdfce446fba5bda48a645d7938367317" + ], + "index": "pypi", + "version": "==0.7.2" + }, + "flask-gravatar": { + "hashes": [ + "sha256:60665f31c2c612891db68ff801e93ed3a0881c6c8ec346abc64d2a9923f562e1", + "sha256:93be048a58cef92345e7bfc78e918e7f4c729b3a33646510b71948c024e7f591" + ], + "index": "pypi", + "version": "==0.5.0" + }, + "flask-login": { + "hashes": [ + "sha256:6d33aef15b5bcead780acc339464aae8a6e28f13c90d8b1cf9de8b549d1c0b4b", + "sha256:7451b5001e17837ba58945aead261ba425fdf7b4f0448777e597ddab39f4fba0" + ], + "index": "pypi", + "version": "==0.5.0" + }, + "flask-mail": { + "hashes": [ + "sha256:22e5eb9a940bf407bcf30410ecc3708f3c56cc44b29c34e1726fe85006935f41" + ], + "index": "pypi", + "version": "==0.9.1" + }, + "flask-pymongo": { + "hashes": [ + "sha256:620eb02dc8808a5fcb90f26cab6cba9d6bf497b15032ae3ca99df80366e33314", + "sha256:8a9577a2c6d00b49f21cb5a5a8d72561730364a2d745551a85349ab02f86fc73" + ], + "index": "pypi", + "version": "==2.3.0" + }, + "flask-restless": { + "hashes": [ + "sha256:1de47fe80abd47239c9a1804e0ba5da1d23b9f40cfc26202d16bed37f178c2b6" + ], + "index": "pypi", + "version": "==0.17.0" + }, + "flask-sqlalchemy": { + "hashes": [ + "sha256:05b31d2034dd3f2a685cbbae4cfc4ed906b2a733cff7964ada450fd5e462b84e", + "sha256:bfc7150eaf809b1c283879302f04c42791136060c6eeb12c0c6674fb1291fae5" + ], + "index": "pypi", + "version": "==2.4.4" + }, + "flask-themes": { + "hashes": [ + "sha256:0586fdd29a4ccfaa37effc92652a3fe50c6a37d929493d5ab7b4b747be08d9fc" + ], + "index": "pypi", + "version": "==0.1.3" + }, + "flask-uploads": { + "hashes": [ + "sha256:53ecbd6033667d50ae02b63adebbaa33c7fc56c09e5293025810cf9d841ecb02" + ], + "index": "pypi", + "version": "==0.2.1" + }, + "flask-wtf": { + "hashes": [ + "sha256:57b3faf6fe5d6168bda0c36b0df1d05770f8e205e18332d0376ddb954d17aef2", + "sha256:d417e3a0008b5ba583da1763e4db0f55a1269d9dd91dcc3eb3c026d3c5dbd720" + ], + "index": "pypi", + "version": "==0.14.3" + }, + "itsdangerous": { + "hashes": [ + "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", + "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" + ], + "version": "==1.1.0" + }, + "jinja2": { + "hashes": [ + "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", + "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" + ], + "version": "==2.11.3" + }, + "markdown": { + "hashes": [ + "sha256:5d9f2b5ca24bc4c7a390d22323ca4bad200368612b5aaa7796babf971d2b2f18", + "sha256:c109c15b7dc20a9ac454c9e6025927d44460b85bd039da028d85e2b6d0bcc328" + ], + "version": "==3.3.3" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", + "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", + "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", + "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", + "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", + "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", + "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", + "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", + "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", + "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", + "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", + "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" + ], + "version": "==1.1.1" + }, + "mimerender": { + "hashes": [ + "sha256:e7f1377efee18c3f562cee54907a3329223c824332889fb74b745ddfd0a9b1c6" + ], + "version": "==0.6.0" + }, + "pymongo": { + "hashes": [ + "sha256:0384d76b409278ddb34ac19cdc4664511685959bf719adbdc051875ded4689aa", + "sha256:05e2bda928a3a6bc6ddff9e5a8579d41928b75d7417b18f9a67c82bb52150ac6", + "sha256:152e4ac3158b776135d8fce28d2ac06e682b885fcbe86690d66465f262ab244e", + "sha256:180511abfef70feb022360b35f4863dd68e08334197089201d5c52208de9ca2e", + "sha256:19d52c60dc37520385f538d6d1a4c40bc398e0885f4ed6a36ce10b631dab2852", + "sha256:1d559a76ae87143ad96c2ecd6fdd38e691721e175df7ced3fcdc681b4638bca1", + "sha256:210ec4a058480b9c3869082e52b66d80c4a48eda9682d7a569a1a5a48100ea54", + "sha256:2163d736d6f62b20753be5da3dc07a188420b355f057fcbb3075b05ee6227b2f", + "sha256:22ee2c94fee1e391735be63aa1c9af4c69fdcb325ae9e5e4ddff770248ef60a6", + "sha256:28633868be21a187702a8613913e13d1987d831529358c29fc6f6670413df040", + "sha256:29390c39ca873737689a0749c9c3257aad96b323439b11279fbc0ba8626ec9c5", + "sha256:2aeb108da1ed8e066800fb447ba5ae89d560e6773d228398a87825ac3630452d", + "sha256:322f6cc7bf23a264151ebc5229a92600c4b55ac83c83c91c9bab1ec92c888a8d", + "sha256:34c15f5798f23488e509eae82fbf749c3d17db74379a88c07c869ece1aa806b9", + "sha256:3873866534b6527e6863e742eb23ea2a539e3c7ee00ad3f9bec9da27dbaaff6f", + "sha256:3dbc67754882d740f17809342892f0b24398770bd99d48c5cb5ba89f5f5dee4e", + "sha256:413b18ac2222f5d961eb8d1c8dcca6c6ca176c8613636d8c13aa23abae7f7a21", + "sha256:42f9ec9d77358f557fe17cc15e796c4d4d492ede1a30cba3664822cae66e97c5", + "sha256:4ac387ac1be71b798d1c372a924f9c30352f30e684e06f086091297352698ac0", + "sha256:4ca92e15fcf02e02e7c24b448a16599b98c9d0e6a46cd85cc50804450ebf7245", + "sha256:4d959e929cec805c2bf391418b1121590b4e7d5cb00af7b1ba521443d45a0918", + "sha256:5091aacbdb667b418b751157f48f6daa17142c4f9063d58e5a64c90b2afbdf9a", + "sha256:5a03ae5ac85b04b2034a0689add9ff597b16d5e24066a87f6ab0e9fa67049156", + "sha256:5e1341276ce8b7752db9aeac6bbb0cbe82a3f6a6186866bf6b4906d8d328d50b", + "sha256:6043d251fac27ca04ff22ed8deb5ff7a43dc18e8a4a15b4c442d2a20fa313162", + "sha256:610d5cbbfd026e2f6d15665af51e048e49b68363fedece2ed318cc8fe080dd94", + "sha256:622a5157ffcd793d305387c1c9fb94185f496c8c9fd66dafb59de0807bc14ad7", + "sha256:65b67637f0a25ac9d25efb13c1578eb065870220ffa82f132c5b2d8e43ac39c3", + "sha256:66573c8c7808cce4f3b56c23cb7cad6c3d7f4c464b9016d35f5344ad743896d7", + "sha256:66b688fc139c6742057795510e3b12c4acbf90d11af1eff9689a41d9c84478d6", + "sha256:685b884fa41bd2913fd20af85866c4ff886b7cbb7e4833b918996aa5d45a04be", + "sha256:6a5834e392c97f19f36670e34bf9d346d733ad89ee0689a6419dd737dfa4308a", + "sha256:728313cc0d59d1a1a004f675607dcf5c711ced3f55e75d82b3f264fd758869f3", + "sha256:733e1cfffc4cd99848230e2999c8a86e284c6af6746482f8ad2ad554dce14e39", + "sha256:7814b2cf23aad23464859973c5cd2066ca2fd99e0b934acefbb0b728ac2525bf", + "sha256:7c77801620e5e75fb9c7abae235d3cc45d212a67efa98f4972eef63e736a8daa", + "sha256:7cd42c66d49ffb68dea065e1c8a4323e7ceab386e660fee9863d4fa227302ba9", + "sha256:7d2ae2f7c50adec20fde46a73465de31a6a6fbb4903240f8b7304549752ca7a1", + "sha256:7edff02e44dd0badd749d7342e40705a398d98c5d8f7570f57cff9568c2351fa", + "sha256:87981008d565f647142869d99915cc4760b7725858da3d39ecb2a606e23f36fd", + "sha256:92e2376ce3ca0e3e443b3c5c2bb5d584c7e59221edfb0035313c6306049ba55a", + "sha256:950710f7370613a6bfa2ccd842b488c5b8072e83fb6b7d45d99110bf44651d06", + "sha256:980527f4ccc6644855bb68056fe7835da6d06d37776a52df5bcc1882df57c3db", + "sha256:9fbffc5bad4df99a509783cbd449ed0d24fcd5a450c28e7756c8f20eda3d2aa5", + "sha256:a8b02e0119d6ee381a265d8d2450a38096f82916d895fed2dfd81d4c7a54d6e4", + "sha256:b17e627844d86031c77147c40bf992a6e1114025a460874deeda6500d0f34862", + "sha256:b1aa62903a2c5768b0001632efdea2e8da6c80abdd520c2e8a16001cc9affb23", + "sha256:b32e4eed2ef19a20dfb57698497a9bc54e74efb2e260c003e9056c145f130dc7", + "sha256:b44fa04720bbfd617b6aef036989c8c30435f11450c0a59136291d7b41ed647f", + "sha256:b4535d98df83abebb572035754fb3d4ad09ce7449375fa09fa9ede2dbc87b62b", + "sha256:bb6a5777bf558f444cd4883d617546182cfeff8f2d4acd885253f11a16740534", + "sha256:bc2eb67387b8376120a2be6cba9d23f9d6a6c3828e00fb0a64c55ad7b54116d1", + "sha256:bd351ceb2decd23d523fc50bad631ee9ae6e97e7cdc355ce5600fe310484f96e", + "sha256:bf70097bd497089f1baabf9cbb3ec4f69c022dc7a70c41ba9c238fa4d0fff7ab", + "sha256:c7fd18d4b7939408df9315fedbdb05e179760960a92b3752498e2fcd03f24c3d", + "sha256:cc359e408712faf9ea775f4c0ec8f2bfc843afe47747a657808d9595edd34d71", + "sha256:cd8fc35d4c0c717cc29b0cb894871555cb7137a081e179877ecc537e2607f0b9", + "sha256:daa44cefde19978af57ac1d50413cd86ebf2b497328e7a27832f5824bda47439", + "sha256:db5098587f58fbf8582d9bda2462762b367207246d3e19623782fb449c3c5fcc", + "sha256:db6fd53ef5f1914ad801830406440c3bfb701e38a607eda47c38adba267ba300", + "sha256:e1414599a97554d451e441afb362dbee1505e4550852c0068370d843757a3fe2", + "sha256:ee42a8f850143ae7c67ea09a183a6a4ad8d053e1dbd9a1134e21a7b5c1bc6c73", + "sha256:f23abcf6eca5859a2982beadfb5111f8c5e76e30ff99aaee3c1c327f814f9f10", + "sha256:f6748c447feeadda059719ef5ab1fb9d84bd370e205b20049a0e8b45ef4ad593" + ], + "version": "==3.11.3" + }, + "python-dateutil": { + "hashes": [ + "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", + "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + ], + "version": "==2.8.1" + }, + "python-mimeparse": { + "hashes": [ + "sha256:76e4b03d700a641fd7761d3cd4fdbbdcd787eade1ebfac43f877016328334f78", + "sha256:a295f03ff20341491bfe4717a39cd0a8cc9afad619ba44b77e86b0ab8a2b8282" + ], + "version": "==1.6.0" + }, + "pyyaml": { + "hashes": [ + "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", + "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", + "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", + "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", + "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", + "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", + "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", + "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", + "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", + "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", + "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", + "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", + "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", + "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", + "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", + "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", + "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", + "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", + "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", + "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", + "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" + ], + "markers": "python_version != '3.4'", + "version": "==5.4.1" + }, + "six": { + "hashes": [ + "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", + "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" + ], + "version": "==1.15.0" + }, + "sqlalchemy": { + "hashes": [ + "sha256:040bdfc1d76a9074717a3f43455685f781c581f94472b010cd6c4754754e1862", + "sha256:1fe5d8d39118c2b018c215c37b73fd6893c3e1d4895be745ca8ff6eb83333ed3", + "sha256:23927c3981d1ec6b4ea71eb99d28424b874d9c696a21e5fbd9fa322718be3708", + "sha256:24f9569e82a009a09ce2d263559acb3466eba2617203170e4a0af91e75b4f075", + "sha256:2578dbdbe4dbb0e5126fb37ffcd9793a25dcad769a95f171a2161030bea850ff", + "sha256:269990b3ab53cb035d662dcde51df0943c1417bdab707dc4a7e4114a710504b4", + "sha256:29cccc9606750fe10c5d0e8bd847f17a97f3850b8682aef1f56f5d5e1a5a64b1", + "sha256:37b83bf81b4b85dda273aaaed5f35ea20ad80606f672d94d2218afc565fb0173", + "sha256:63677d0c08524af4c5893c18dbe42141de7178001360b3de0b86217502ed3601", + "sha256:639940bbe1108ac667dcffc79925db2966826c270112e9159439ab6bb14f8d80", + "sha256:6a939a868fdaa4b504e8b9d4a61f21aac11e3fecc8a8214455e144939e3d2aea", + "sha256:6b8b8c80c7f384f06825612dd078e4a31f0185e8f1f6b8c19e188ff246334205", + "sha256:6c9e6cc9237de5660bcddea63f332428bb83c8e2015c26777281f7ffbd2efb84", + "sha256:6ec1044908414013ebfe363450c22f14698803ce97fbb47e53284d55c5165848", + "sha256:6fca33672578666f657c131552c4ef8979c1606e494f78cd5199742dfb26918b", + "sha256:751934967f5336a3e26fc5993ccad1e4fee982029f9317eb6153bc0bc3d2d2da", + "sha256:8be835aac18ec85351385e17b8665bd4d63083a7160a017bef3d640e8e65cadb", + "sha256:927ce09e49bff3104459e1451ce82983b0a3062437a07d883a4c66f0b344c9b5", + "sha256:94208867f34e60f54a33a37f1c117251be91a47e3bfdb9ab8a7847f20886ad06", + "sha256:94f667d86be82dd4cb17d08de0c3622e77ca865320e0b95eae6153faa7b4ecaf", + "sha256:9e9c25522933e569e8b53ccc644dc993cab87e922fb7e142894653880fdd419d", + "sha256:a0e306e9bb76fd93b29ae3a5155298e4c1b504c7cbc620c09c20858d32d16234", + "sha256:a8bfc1e1afe523e94974132d7230b82ca7fa2511aedde1f537ec54db0399541a", + "sha256:ac2244e64485c3778f012951fdc869969a736cd61375fde6096d08850d8be729", + "sha256:b4b0e44d586cd64b65b507fa116a3814a1a53d55dce4836d7c1a6eb2823ff8d1", + "sha256:baeb451ee23e264de3f577fee5283c73d9bbaa8cb921d0305c0bbf700094b65b", + "sha256:c7dc052432cd5d060d7437e217dd33c97025287f99a69a50e2dc1478dd610d64", + "sha256:d1a85dfc5dee741bf49cb9b6b6b8d2725a268e4992507cf151cba26b17d97c37", + "sha256:d90010304abb4102123d10cbad2cdf2c25a9f2e66a50974199b24b468509bad5", + "sha256:ddfb511e76d016c3a160910642d57f4587dc542ce5ee823b0d415134790eeeb9", + "sha256:e273367f4076bd7b9a8dc2e771978ef2bfd6b82526e80775a7db52bff8ca01dd", + "sha256:e5bb3463df697279e5459a7316ad5a60b04b0107f9392e88674d0ece70e9cf70", + "sha256:e8a1750b44ad6422ace82bf3466638f1aa0862dbb9689690d5f2f48cce3476c8", + "sha256:eab063a70cca4a587c28824e18be41d8ecc4457f8f15b2933584c6c6cccd30f0", + "sha256:ecce8c021894a77d89808222b1ff9687ad84db54d18e4bd0500ca766737faaf6", + "sha256:f4d972139d5000105fcda9539a76452039434013570d6059993120dc2a65e447", + "sha256:fd3b96f8c705af8e938eaa99cbd8fd1450f632d38cad55e7367c33b263bf98ec", + "sha256:fdd2ed7395df8ac2dbb10cefc44737b66c6a5cd7755c92524733d7a443e5b7e2" + ], + "version": "==1.3.23" + }, + "visitor": { + "hashes": [ + "sha256:2c737903b2b6864ebc6167eef7cf3b997126f1aa94bdf590f90f1436d23e480a" + ], + "version": "==0.1.3" + }, + "werkzeug": { + "hashes": [ + "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43", + "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c" + ], + "version": "==1.0.1" + }, + "wtforms": { + "hashes": [ + "sha256:7b504fc724d0d1d4d5d5c114e778ec88c37ea53144683e084215eed5155ada4c", + "sha256:81195de0ac94fbc8368abbaf9197b88c4f3ffd6c2719b5bf5fc9da744f3d829c" + ], + "version": "==2.3.3" + } + }, + "develop": {} +} diff --git a/README.md b/README.md index 5beff16..2d2a6c3 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,11 @@ Use this Flask app to initiate your project with less work. In this application * **Flask-SQLAlchemy** - Adds SQLAlchemy support to Flask. Quick and easy. * **Flask-PyMongo** - Add PyMongo Support MongoDB. * **Flask-Themes** - Flask-Themes makes it easy for your application to support a wide range of appearances. -* **Flask-WTF** - Flask-Themes makes it easy for your application to support a wide range of appearances. +* **Flask-WTF** - Simple integration of Flask and WTForms, including CSRF, file upload, and reCAPTCHA. ## Requirements -gcc, make, Python 2.5+, python-pip, virtualenv +Python 3.8.5+, pipenv ## Instalation @@ -29,18 +29,13 @@ First, clone this repository. $ git clone http://github.com/berlotto/flask-app-template $ cd flask-app-template -Create a virtualenv, and activate this: - - $ virtualenv env - $ source env/bin/activate - After, install all necessary to run: - $ pip install -r requirements.txt + $ pipenv install Than, run the application: - $ python run.py + $ pipenv run python run.py To see your application, access this url in your browser: diff --git a/app/__init__.py b/app/__init__.py index 4bed0b1..7b9df66 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -5,10 +5,10 @@ """ from flask import Flask -from flask.ext.bootstrap import Bootstrap -from flask.ext.sqlalchemy import SQLAlchemy -from flask.ext.pymongo import PyMongo -from flask.ext.login import LoginManager +from flask_bootstrap import Bootstrap +from flask_sqlalchemy import SQLAlchemy +from flask_pymongo import PyMongo +from flask_login import LoginManager app = Flask(__name__) diff --git a/app/configuration.py b/app/configuration.py index c124e54..6b4c5a5 100644 --- a/app/configuration.py +++ b/app/configuration.py @@ -1,8 +1,3 @@ -# -*- encoding: utf-8 -*- -""" -Python Aplication Template -Licence: GPLv3 -""" class Config(object): """ @@ -10,17 +5,19 @@ class Config(object): """ DEBUG = False TESTING = False - DATABASE_URI = 'sqlite:///application.db' + SQLALCHEMY_DATABASE_URI = 'sqlite:///application.db' BOOTSTRAP_FONTAWESOME = True SECRET_KEY = "MINHACHAVESECRETA" CSRF_ENABLED = True + SQLALCHEMY_TRACK_MODIFICATIONS = True #Get your reCaptche key on: https://www.google.com/recaptcha/admin/create #RECAPTCHA_PUBLIC_KEY = "6LffFNwSAAAAAFcWVy__EnOCsNZcG2fVHFjTBvRP" #RECAPTCHA_PRIVATE_KEY = "6LffFNwSAAAAAO7UURCGI7qQ811SOSZlgU69rvv7" class ProductionConfig(Config): - DATABASE_URI = 'mysql://user@localhost/foo' + SQLALCHEMY_DATABASE_URI = 'mysql://user@localhost/foo' + SQLALCHEMY_TRACK_MODIFICATIONS = False class DevelopmentConfig(Config): DEBUG = True diff --git a/app/forms.py b/app/forms.py index feed682..b1887af 100644 --- a/app/forms.py +++ b/app/forms.py @@ -1,18 +1,13 @@ -# -*- encoding: utf-8 -*- -""" -Python Aplication Template -Licence: GPLv3 -""" +from flask_wtf import FlaskForm +from wtforms import TextField, TextAreaField, DateTimeField, PasswordField +from wtforms.validators import Required -from flask.ext.wtf import Form, TextField, TextAreaField, DateTimeField, PasswordField -from flask.ext.wtf import Required - -class ExampleForm(Form): +class ExampleForm(FlaskForm): title = TextField(u'Título', validators = [Required()]) content = TextAreaField(u'Conteúdo') date = DateTimeField(u'Data', format='%d/%m/%Y %H:%M') #recaptcha = RecaptchaField(u'Recaptcha') -class LoginForm(Form): +class LoginForm(FlaskForm): user = TextField(u'Usuário', validators = [Required()]) password = PasswordField(u'Senha', validators = [Required()]) diff --git a/app/models.py b/app/models.py index b331034..3541ebe 100644 --- a/app/models.py +++ b/app/models.py @@ -1,9 +1,3 @@ -# -*- encoding: utf-8 -*- -""" -Python Aplication Template -Licence: GPLv3 -""" - from app import db class ModelExample(db.Model): @@ -31,7 +25,7 @@ def is_anonymous(self): return False def get_id(self): - return unicode(self.id) + return str(self.id) def __repr__(self): return '' % (self.nickname) diff --git a/app/templates/base.html b/app/templates/base.html index 7d8e76d..4ee19b3 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1,36 +1,71 @@ -{% extends "bootstrap_base.html" %} +{% extends "bootstrap/base.html" %} {%block title%}Base{%endblock%} -{%block body_content%} +{% block navbar %} + +{% endblock %} -
-
-
- - +{%block content %} -
- - -
- -
-
+
{% with messages = get_flashed_messages() %} {% if messages %}
-
+
    {% for message in messages %}
  • {{ message }}
  • diff --git a/app/templates/index.html b/app/templates/index.html index 51fd812..9052249 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -6,13 +6,13 @@

    Index

    -
    +
    -
    +
    -
    +
    diff --git a/app/templates/login.html b/app/templates/login.html index 47dd560..1f757c2 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -1,5 +1,5 @@ {% extends "base.html" %} -{% import "bootstrap_wtf.html" as wtf %} +{% import "bootstrap/wtf.html" as wtf %} {%block title%}Login!{%endblock%} @@ -7,14 +7,14 @@

    Login

    -
    +
    -
    + {{ wtf.form_errors(form,"only") }} {{ form.hidden_tag() }} - {{ wtf.horizontal_field(form.user) }}
    - {{ wtf.horizontal_field(form.password) }} + {{ wtf.form_field(form.user) }}
    + {{ wtf.form_field(form.password) }}
    diff --git a/app/templates/new.html b/app/templates/new.html index 994bdb0..24eba60 100644 --- a/app/templates/new.html +++ b/app/templates/new.html @@ -7,7 +7,7 @@

    Novo

    -
    +
    {{ wtf.form_errors(form,"only") }} diff --git a/app/views.py b/app/views.py index a0cc251..2bf526e 100644 --- a/app/views.py +++ b/app/views.py @@ -1,14 +1,9 @@ -# -*- encoding: utf-8 -*- -""" -Python Aplication Template -Licence: GPLv3 -""" - from flask import url_for, redirect, render_template, flash, g, session -from flask.ext.login import login_user, logout_user, current_user, login_required +from flask_login import login_user, logout_user, current_user, login_required from app import app, lm -from forms import ExampleForm, LoginForm -from models import User +from app.forms import ExampleForm, LoginForm +from app.models import User + @app.route('/') def index(): @@ -19,21 +14,23 @@ def index(): def posts(): return render_template('list.html') + @app.route('/new/') @login_required def new(): form = ExampleForm() return render_template('new.html', form=form) + @app.route('/save/', methods = ['GET','POST']) @login_required def save(): form = ExampleForm() if form.validate_on_submit(): - print "salvando os dados:" - print form.title.data - print form.content.data - print form.date.data + print("salvando os dados:") + print(form.title.data) + print(form.content.data) + print(form.date.data) flash('Dados salvos!') return render_template('new.html', form=form) @@ -53,7 +50,7 @@ def load_user(id): @app.route('/login/', methods = ['GET', 'POST']) def login(): - if g.user is not None and g.user.is_authenticated(): + if g.user is not None and g.user.is_authenticated: return redirect(url_for('index')) form = LoginForm() if form.validate_on_submit(): diff --git a/create_env.sh b/create_env.sh deleted file mode 100755 index 2efccf9..0000000 --- a/create_env.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - - -## Requirements -## gcc, make, Python 2.5+, python-pip, virtualenv - -## Instalation -## Create a virtualenv, and activate this: - -virtualenv env -source env/bin/activate -pip install -r requirements.txt -python run.py - diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index d28736b..0000000 --- a/requirements.txt +++ /dev/null @@ -1,25 +0,0 @@ -Flask==0.9 -Flask-Admin==1.0.4 -Flask-Bootstrap==2.2.2-1 -Flask-Cache==0.10.1 -Flask-FlatPages==0.3 -Flask-Gravatar==0.2.4 -Flask-Login==0.1.3 -Flask-Mail==0.7.4 -Flask-PyMongo==0.2.1 -Flask-Restless==0.9.1 -Flask-SQLAlchemy==0.16 -Flask-Themes==0.1.3 -Flask-Uploads==0.1.3 -Flask-WTF==0.8.2 -Jinja2==2.6 -Markdown==2.2.1 -PyYAML==3.10 -SQLAlchemy==0.8.0b2 -WTForms==1.0.3 -Werkzeug==0.8.3 -argparse==1.2.1 -blinker==1.2 -pymongo==2.5.1 -python-dateutil==1.5 -wsgiref==0.1.2 diff --git a/run.py b/run.py index 7951828..bfb77c4 100644 --- a/run.py +++ b/run.py @@ -1,9 +1,3 @@ -# -*- encoding: utf-8 -*- -""" -Python Aplication Template -Licence: GPLv3 -""" - import os from app import app