使用Python-Flask框架开发Web网站系列课程(一)构建项目
前言
使用IDE:PyCharm
操作系統(tǒng): Mac
Python版本:3.6
我的郵箱:51263921@qq.com
交流群: 372430835
請(qǐng)注意,既然要學(xué)習(xí)開發(fā),那么要注意以下幾個(gè)問題。
1、開發(fā)語言版本不一樣,尤其是Python,會(huì)導(dǎo)致同一段代碼壓根跑不起來的情況。所以請(qǐng)保證版本一致。
2、操作系統(tǒng)不一樣,自然也會(huì)有區(qū)分,但是Mac環(huán)境和Linux環(huán)境基本還是比較相近,貼合生產(chǎn),所以使用Mac作為演示環(huán)境。但與Window的差別也不會(huì)很大。
3、簡(jiǎn)易使用一樣的IDE工具,但是不強(qiáng)求。
4、本課代碼的github地址在頁面最底。
?
構(gòu)建項(xiàng)目
一、創(chuàng)建虛擬環(huán)境venv
1、從前我很皮,不喜歡創(chuàng)建這東西,都是直接用系統(tǒng)環(huán)境的Python,后來項(xiàng)目一多,呵呵噠,這個(gè)項(xiàng)目用的Django1.9,那個(gè)項(xiàng)目又用Django2.0。得,亂套了。所以,請(qǐng)養(yǎng)成良好的習(xí)慣,使用venv大人。
2、通過PyCharm添加虛擬環(huán)境venv ,Windows在File->Settings,Mac在PyCharm->Preferences,? 打開頁面后,按下圖配置。Add local Python Interpreter。最后 Apply -> OK。
?
?二、安裝flask
2.1 看下圖,在Terminal控件里面執(zhí)行 pip install flask==1.0.2? 。
2.2 然后我們將這個(gè)階段的依賴包記錄下來,使用的命令為:? ? pip freeze>requirement.txt?
?2.3? 我們開始構(gòu)建目錄結(jié)構(gòu)
我們需要一個(gè)目錄放前端的代碼(frontend),一個(gè)放后端代碼(backend),一個(gè)放公共方法代碼(utils),一個(gè)放配置文件(config)。
我們?cè)诟夸沵yproject里面右鍵New->Python Package,用這個(gè)創(chuàng)建包。按上面括號(hào)里面的名字建。
2.4? 構(gòu)建后端代碼
?2.4.1 添加config.py,在/myproject/config下。
這東西就是我們網(wǎng)站以后所有配置存放的地方啦,其中Config放的是各個(gè)環(huán)境都一致的配置,ProdConfig放的是生產(chǎn)環(huán)境的配置,SitConfig存放SIT環(huán)境配置,其他類比。
最后的一行,代表config = SitConfig() 當(dāng)前獲取的是SIT環(huán)境的配置。
全路徑為:/myproject/config/config.py
內(nèi)容如下:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2017/11/8. """ import osBASE_DIR = os.path.dirname(os.path.abspath(__file__))class Config(object):"""Base config class."""# 版本VERSION = 'beta 0.1'# 項(xiàng)目名稱PROJECTNAME = 'myproject'# 端口PORT = 10101SECRET_KEY = '1234567890!@#$%^&*()'class ProdConfig(Config):"""Production config class."""# 是否開啟調(diào)試DEBUG = False# 主機(jī)ip地址HOST = '0.0.0.0'class SitConfig(Config):"""Development config class."""# Open the DEBUG# 是否開啟調(diào)試DEBUG = True# 主機(jī)ip地址HOST = '127.0.0.1'class DevConfig(Config):pass# Default using Config settings, you can write if/else for different env config = SitConfig()2.4.2 修改/myproject/backend/__init__.py
這個(gè)是未來整個(gè)后端的入口文件,具體內(nèi)容如下:
全路徑:/myproject/backend/__init__.py
具體代碼如下:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午2:41. """from flask import Flask from config.config import configdef create_app():#初始化項(xiàng)目實(shí)例app = Flask(__name__)app.secret_key = app.config['SECRET_KEY']#導(dǎo)入配置項(xiàng)app.config.from_object(config)# 鉤子 在請(qǐng)求執(zhí)行之前@app.before_requestdef before_request():print('hi')return app?
2.4.3 在根目錄添加后端項(xiàng)目管理文件? manage.py
要先補(bǔ)一個(gè)模塊? ?pip install Flask-Script==2.0.6
添加一個(gè)空的python腳本,manage.py
全路徑:/myproject/manage.py
內(nèi)容如下:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午3:40. """ from flask_script import Manager, Server from backend import create_appapp = create_app()app.debug = app.config["DEBUG"] # 獲取根目錄config.py的配置項(xiàng) host = app.config["HOST"] port = app.config["PORT"]# Init manager object via app object manager = Manager(app)# Create a new commands: server # This command will be run the Flask development_env server manager.add_command("runserver", Server(host=host,port=port,threaded=True))@manager.shell def make_shell_context():"""Create a python CLI.return: Default import objecttype: `Dict`"""# 確保有導(dǎo)入 Flask app object,否則啟動(dòng)的 CLI 上下文中仍然沒有 app 對(duì)象return dict(app=app)if __name__ == '__main__':manager.run()2.4.4 添加視圖文件,views.py
我們?cè)L問一個(gè)鏈接,要顯示或者返回什么東西,就是在這里處理后返回給瀏覽器或者接口的。
全路徑:/myproject/backend/views.py
內(nèi)容如下:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午3:51. """ from flask import Blueprint,jsonify#賬戶的藍(lán)圖 訪問http://host:port/account 這個(gè)鏈接的子鏈接,都會(huì)跳到這里 account = Blueprint('/account', __name__)# 訪問http://host:port/account/test 這個(gè)鏈接,就會(huì)跳到這里 @account.route('/test') #上面的鏈接,綁定的就是這個(gè)方法,我們給瀏覽器或者接口請(qǐng)求 一個(gè)json格式的返回 def test():return jsonify({'code':0,'content':'hi flask'})2.4.5 添加路由文件,urls.py
全路徑:/myproject/backend/urls.py
內(nèi)容為:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午3:50. """from backend.views import account# 藍(lán)圖注冊(cè) def register(app):app.register_blueprint(account, url_prefix='/account', strict_slashes=False)2.4.6 最后一步,添加內(nèi)容到入口文件__init__.py
我們添加了兩行代碼
from backend.urls import register register(app)用來干啥的呢,是要把我們路由藍(lán)圖的對(duì)應(yīng)關(guān)系注冊(cè)到我們的 flask實(shí)例里面。和我們之前把配置文件注冊(cè)到app.config里面是一個(gè)道理。
路徑:/myproject/backend/__init__.py
內(nèi)容如下:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午2:41. """from flask import Flask from config.config import config from backend.urls import registerdef create_app():#初始化項(xiàng)目實(shí)例app = Flask(__name__)app.secret_key = app.config['SECRET_KEY']#導(dǎo)入配置項(xiàng)app.config.from_object(config)# 注冊(cè)路由register(app)# 鉤子 在請(qǐng)求執(zhí)行之前@app.before_requestdef before_request():print('hi')return app三、啟動(dòng)項(xiàng)目
3.1? 點(diǎn)擊根目錄的manage.py,右鍵執(zhí)行
執(zhí)行方式如圖1,然后我們會(huì)發(fā)現(xiàn)還是缺了參數(shù),請(qǐng)看圖2、圖3,通過edit configurations,在彈出框中的 Parameters 里面輸入runserver。Apply后OK。
現(xiàn)在再次點(diǎn)擊根目錄的manage.py,右鍵執(zhí)行。
?* Serving Flask app "backend" (lazy loading)
?* Environment: production
? ?WARNING: Do not use the development server in a production environment.
? ?Use a production WSGI server instead.
?* Debug mode: on
?* Running on http://127.0.0.1:10101/ (Press CTRL+C to quit)
?* Restarting with stat
?* Debugger is active!
?* Debugger PIN: 110-176-230
?
現(xiàn)在,我們?cè)跒g覽器輸入? http://127.0.0.1:10101/account/test
?
圖1:
圖2
圖3
?
四、GITHUB地址
https://github.com/lyy8510a/myproject/releases/tag/v1
?
總結(jié)
以上是生活随笔為你收集整理的使用Python-Flask框架开发Web网站系列课程(一)构建项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP学习方向-进阶2(三)
- 下一篇: websocket python爬虫_p