使用Python-Flask框架開發Web網站系列課程(一)構建項目

版權聲明:如需轉載,請注明轉載地址。 https://blog.csdn.net/oJohnny123/article/details/81907475

前言


使用IDE:PyCharm

操作系統: Mac

Python版本:3.6

我的郵箱:51263921@qq.com

交流群: 372430835

請注意,既然要學習開發,那么要注意以下幾個問題。

1、開發語言版本不一樣,尤其是Python,會導致同一段代碼壓根跑不起來的情況。所以請保證版本一致。

2、操作系統不一樣,自然也會有區分,但是Mac環境和Linux環境基本還是比較相近,貼合生產,所以使用Mac作為演示環境。但與Window的差別也不會很大。

3、簡易使用一樣的IDE工具,但是不強求。

4、本課代碼的github地址在頁面最底。

?

構建項目


一、創建虛擬環境venv

1、從前我很皮,不喜歡創建這東西,都是直接用系統環境的Python,后來項目一多,呵呵噠,這個項目用的Django1.9,那個項目又用Django2.0。得,亂套了。所以,請養成良好的習慣,使用venv大人。

2、通過PyCharm添加虛擬環境venv ,Windows在File->Settings,Mac在PyCharm->Preferences,? 打開頁面后,按下圖配置。Add local Python Interpreter。最后 Apply -> OK。

?

?二、安裝flask

2.1 看下圖,在Terminal控件里面執行 pip install flask==1.0.2? 。

2.2 然后我們將這個階段的依賴包記錄下來,使用的命令為:? ? pip freeze>requirement.txt?

?2.3? 我們開始構建目錄結構

我們需要一個目錄放前端的代碼(frontend),一個放后端代碼(backend),一個放公共方法代碼(utils),一個放配置文件(config)。

我們在根目錄myproject里面右鍵New->Python Package,用這個創建包。按上面括號里面的名字建。

2.4? 構建后端代碼

?2.4.1 添加config.py,在/myproject/config下。

這東西就是我們網站以后所有配置存放的地方啦,其中Config放的是各個環境都一致的配置,ProdConfig放的是生產環境的配置,SitConfig存放SIT環境配置,其他類比。

最后的一行,代表config = SitConfig() 當前獲取的是SIT環境的配置。

全路徑為:/myproject/config/config.py

內容如下:

#!/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'# 項目名稱PROJECTNAME = 'myproject'# 端口PORT = 10101SECRET_KEY = '1234567890!@#$%^&*()'class ProdConfig(Config):"""Production config class."""# 是否開啟調試DEBUG = False# 主機ip地址HOST = '0.0.0.0'class SitConfig(Config):"""Development config class."""# Open the DEBUG# 是否開啟調試DEBUG = True# 主機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

這個是未來整個后端的入口文件,具體內容如下:

全路徑:/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():#初始化項目實例app = Flask(__name__)app.secret_key = app.config['SECRET_KEY']#導入配置項app.config.from_object(config)# 鉤子 在請求執行之前@app.before_requestdef before_request():print('hi')return app

?

2.4.3 在根目錄添加后端項目管理文件? manage.py

要先補一個模塊? ?pip install Flask-Script==2.0.6

添加一個空的python腳本,manage.py

全路徑:/myproject/manage.py

內容如下:

#!/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的配置項
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`"""# 確保有導入 Flask app object,否則啟動的 CLI 上下文中仍然沒有 app 對象return dict(app=app)if __name__ == '__main__':manager.run()

2.4.4 添加視圖文件,views.py

我們訪問一個鏈接,要顯示或者返回什么東西,就是在這里處理后返回給瀏覽器或者接口的。

全路徑:/myproject/backend/views.py

內容如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2018/8/21 下午3:51.
"""
from flask import Blueprint,jsonify#賬戶的藍圖  訪問http://host:port/account 這個鏈接的子鏈接,都會跳到這里
account = Blueprint('/account', __name__)# 訪問http://host:port/account/test 這個鏈接,就會跳到這里
@account.route('/test')
#上面的鏈接,綁定的就是這個方法,我們給瀏覽器或者接口請求 一個json格式的返回
def test():return jsonify({'code':0,'content':'hi flask'})

2.4.5 添加路由文件,urls.py

全路徑:/myproject/backend/urls.py

內容為:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Created by liaoyangyang1 on 2018/8/21 下午3:50.
"""from backend.views import account# 藍圖注冊
def register(app):app.register_blueprint(account, url_prefix='/account', strict_slashes=False)

2.4.6 最后一步,添加內容到入口文件__init__.py

我們添加了兩行代碼

from backend.urls import register
register(app)

用來干啥的呢,是要把我們路由藍圖的對應關系注冊到我們的 flask實例里面。和我們之前把配置文件注冊到app.config里面是一個道理。

路徑:/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 config
from backend.urls import registerdef create_app():#初始化項目實例app = Flask(__name__)app.secret_key = app.config['SECRET_KEY']#導入配置項app.config.from_object(config)# 注冊路由register(app)# 鉤子 在請求執行之前@app.before_requestdef before_request():print('hi')return app

三、啟動項目

3.1? 點擊根目錄的manage.py,右鍵執行

執行方式如圖1,然后我們會發現還是缺了參數,請看圖2、圖3,通過edit configurations,在彈出框中的 Parameters 里面輸入runserver。Apply后OK。

現在再次點擊根目錄的manage.py,右鍵執行。

?* 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
?

現在,我們在瀏覽器輸入? http://127.0.0.1:10101/account/test

?

圖1:

圖2

圖3

?

四、GITHUB地址

https://github.com/lyy8510a/myproject/releases/tag/v1

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mysql varchar 字節長度

1.我們經常 mysql創建 varchar(20) name這個 20長度 究竟是表示的字符數還是字節數?根編碼字符集又有沒有關系? 首先 mysql 5.X 以上的版本的 定義中 表示的字符長度,如上varchar(20)你既可以添加20個英文字符&#x…

網上訂餐python_來自美國網上訂餐網站的創新

美國網上訂餐網站的創新:小服務半徑產生大價值來源:站長網 作者:揚揚做為一個上班族,尤其是從事it行業的白領階層,整日對著電腦鍵盤敲敲打打,講究的是效率,而每天中午乃至晚上考慮吃些什么卻是讓人極其頭疼的事。去哪里…

PHP學習方向-進階2(三)

實踐篇 給定二維數組,根據某個字段排序如何判斷上傳文件類型,如:僅允許 jpg 上傳不使用臨時變量交換兩個變量的值 $a1; $b2; > $a2; $b1; strtoupper 在轉換中文時存在亂碼,你如何解決?php echo strtoupper(ab你好c…

Spring的@Autowired和@Resource

Autowired 當Spring發現Autowired注解時,將自動在代碼上下文中找到和其匹配(默認是類型匹配)的Bean,并自動注入到相應的地方去。 必須確保該類型在IOC容器中只有一個對象;否則報錯。 Resource1、Resource后面沒有任何內…

關于xml文件 xsi:schemaLocation

原文連接&#xff1a;https://www.jianshu.com/p/7f4cbcd9f09f ------------------------------------------------------相信很多人對xml 頭上一大堆得東西都是拿來主義&#xff0c;copy過來就行了&#xff0c;并不理解那是什么意思先來一段<?xml version"1.0" …

ES6部分特性小結

前言 踩著前人的肩膀&#xff0c;努力前行。參考了很多前人的文章。 1.變量聲明const和let es6之前聲明變量只能用var&#xff0c;var的特點是無論聲明在何處&#xff0c;都會被視為聲明在函數的最頂部(不在函數內即在全局作用域的最頂部) function test(){if(false){var name …

java 順序棧_Java實現順序棧

一、分析棧是限定僅在表的一端進行插入或刪除操作的線性表&#xff0c;對于棧來說&#xff0c;操作端稱為棧頂&#xff0c;另一端則稱為棧底&#xff0c;棧的修改是按照后進先出的原則進行的&#xff0c;因此又稱為后進先出的線性表。順序棧是指利用順序存儲結構實現的棧&#…

Spring IO platform

什么是Spring IO PlatformSpring IO Platform&#xff0c;簡單的可以認為是一個依賴維護平臺&#xff0c;該平臺將相關依賴匯聚到一起&#xff0c;針對每個依賴&#xff0c;都提供了一個版本號&#xff0c;這些版本對應的依賴都是經過測試的&#xff0c;可以保證一起正常使用。…

二十多歲不信,三十多歲卻深信不疑的道理

1.那些年偷的懶、荒廢的時間、敗壞的身體&#xff0c;都&#xff01;得&#xff01;還&#xff01; 年輕的時候心比天高&#xff0c;以為自己能干出一番大事業&#xff0c;后來慢慢意識到自己只是個普通人。 2.不和講道理。 3.原來被嗤之以鼻的門當戶對是有一定道理的。 4.以貌…

javascript === 和==的區別

原文鏈接&#xff1a;https://blog.csdn.net/seven_amber/article/details/62889290 -------------------------------------------------------------------- 用于比較 判斷 兩者相等 在比較的時候可以轉自動換數據類型用于嚴格比較 判斷兩者嚴格相等 嚴格比較…

authentication java_HTTP基本認證(Basic Authentication)的JAVA實例代碼

大家在登錄網站的時候&#xff0c;大部分時候是通過一個表單提交登錄信息。但是有時候瀏覽器會彈出一個登錄驗證的對話框&#xff0c;如下圖&#xff0c;這就是使用HTTP基本認證。下面來看看一看這個認證的工作過程:第一步:客戶端發送http request 給服務器,服務器驗證該用戶是…

Python數據分析入門(四)

前言上期給大家分享了關于豆瓣5500部電視劇的分析&#xff0c;那么這次我們就給吃貨們帶來一些福利&#xff0c;此次我們的主題為“尋找最好吃的火鍋”。進入主題之前&#xff0c;先給所有的吃貨們帶來一桌美味的火鍋&#xff0c;作為各位看官的前菜。數據采集此次我們采集的是…

微信開發者工具下載

https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

java continue goto_Java中goto和break、continue實現區別

goto 關鍵字很早就在程序設計語言中出現。事實上&#xff0c;goto 是匯編語言的程序控制結構的始祖&#xff1a;“若條件 A&#xff0c;則跳到這里&#xff1b;否則跳到那里”。若閱讀由幾乎所有編譯器生成的匯編代碼&#xff0c;就會發現程序控制里包含了許多跳轉。然而&#…

Linux VirtualBox安裝及使用指南

2019獨角獸企業重金招聘Python工程師標準>>> VirtualBox是一款虛擬機軟件。雖然它的功能并不及VMware Workstation Pro&#xff0c;但它對開源精神的堅持使得它在Linux中依然深受歡迎。 唯一難以令人接受的是&#xff0c;VirtualBox的安裝步驟較為復雜。不過&#x…

java web vm_java web .vm文件??

在JavaWeb項目中有很多.vm文件&#xff0c;打開以后是類似于.NETMVC項目中的.cshtml文件的形式#if($linkList)#set($itemsOnLine0)#foreach($linkin...在Java Web項目中有很多.vm文件&#xff0c;打開以后是類似于.NET MVC項目中的.cshtml文件的形式#if($linkList)#set ($items…

Android studio gradle 無法獲取 pom文件

Android studio 3.1 導入app項目后&#xff0c;gradle無法獲取 pom文件 具體保存內容如下&#xff1a; Could not GET https://dl.google.com/dl/android/maven2/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-g…

生產環境linux下安裝兩個及兩個以上tomcat實踐

前言: 在生產環境部署程序項目中&#xff0c;有時候由于服務器緊張或缺少服務器等原因,往往都需要安裝兩個及兩個以上tomcat。我們需要在/etc/profile中增加tomcat的環境變量&#xff0c;然后在新增加的tomcat的bin目錄下的catalina.sh中引用自己在/etc/profile中配置的環境變量…

java 內存 四_java最終化的內存保留問題(4)

四、一種代替最終化的選擇在前面一節中的示例還存在一種不確定性可能&#xff1a;JVM并不能保證它在最終化隊列中調用對象的終結器的順序。而來自于所有類(應用程序&#xff0c;庫&#xff0c;等等)的終結器都是被同等對待的。因此&#xff0c;一個占有大量內存或一種稀有的本地…

基于Spring Boot不同的環境使用不同的配置方法

原文路徑&#xff1a;http://www.jb51.net/article/132589.htm ---------------------------------------- 默認是profile為dev&#xff0c;可以修改 spring 多文件配置&#xff1a; 1、properties文件 2、YAML文件 一、properties文件 在 Spring Boot 中&#xff0c; 多環境配…