日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Flask简介与简单项目操作流程

發(fā)布時(shí)間:2024/7/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask简介与简单项目操作流程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Flask框架簡(jiǎn)介


Flask誕生于2010年,是Armin ronacher(人名)用Python語言基于Werkzeug工具箱編寫的輕量級(jí)Web開發(fā)框架。它主要面向需求簡(jiǎn)單的小應(yīng)用。Flask本身相當(dāng)于一個(gè)內(nèi)核,其他幾乎所有的功能都要用到擴(kuò)展(郵件擴(kuò)展Flask-Mail,用戶認(rèn)證Flask-Login),都需要用第三方的擴(kuò)展來實(shí)現(xiàn)。比如可以用Flask-extension加入ORM、窗體驗(yàn)證工具,文件上傳、身份驗(yàn)證等。Flask沒有默認(rèn)使用的數(shù)據(jù)庫(kù),你可以選擇MySQL,也可以用NoSQL。其 WSGI 工具箱采用Werkzeug(路由模塊),模板引擎則使用Jinja2。可以說Flask框架的核心就是Werkzeug和Jinja2。Python最出名的框架要數(shù)Django,此外還有Flask、Tornado等框架。雖然Flask不是最出名的框架,但是Flask應(yīng)該算是最靈活的框架之一,這也是Flask受到廣大開發(fā)者喜愛的原因。
總結(jié)1:Flask也是一款MVC框架

總結(jié)2:核心為Werkzeug,這是由python語言編寫的遵守WSGI協(xié)議的一個(gè)包


  • Flask是一款MVC框架,主要是從模型、視圖、模板三個(gè)方面對(duì)Flask框架有一個(gè)全面的認(rèn)識(shí),通過完成作者-讀書功能,先來熟悉Flask框架的完整使用步驟。
  • 操作步驟為:
    • 1.創(chuàng)建項(xiàng)目
    • 2.配置數(shù)據(jù)庫(kù)
    • 3.定義模型類
    • 4.定義視圖并配置URL
    • 5.定義模板


環(huán)境安裝

  • 使用虛擬環(huán)境安裝Flask,可以避免包的混亂和版本的沖突,虛擬環(huán)境是Python解釋器的副本,在虛擬環(huán)境中你可以安裝擴(kuò)展包,為每個(gè)程序單獨(dú)創(chuàng)建的虛擬環(huán)境,可以保證程序只能訪問虛擬環(huán)境中的包。而不會(huì)影響系統(tǒng)中安裝的全局Python解釋器,從而保證全局解釋器的整潔。
  • 注意:Werkzeug對(duì)python3的支持并不好,所以如果使用Flask框架推薦使用python2
  • 虛擬環(huán)境使用virtualenv創(chuàng)建,可以查看系統(tǒng)是否安裝了virtualenv:

    virtualenv --version
  • 運(yùn)行如下命令安裝虛擬環(huán)境的應(yīng)用

sudo pip install virtualenv sudo pip install virtualenvwrapper
  • 如果提示找不到mkvirtualenv命令,須配置環(huán)境變量:
# 1、創(chuàng)建目錄用來存放虛擬環(huán)境 mkdir $HOME/.virtualenvs# 2、打開~/.bashrc文件,并添加如下: export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh# 3、運(yùn)行 source ~/.bashrc
  • 創(chuàng)建虛擬環(huán)境(ubuntu里須在聯(lián)網(wǎng)狀態(tài)下)
mkvirtualenv Flask_py
  • 進(jìn)入虛擬環(huán)境
workon Flask_py
  • 退出虛擬環(huán)境
deactivate Flask_py
  • 在虛擬環(huán)境中使用pip命令安裝Flask包
$ pip install flask==0.10.1

1、創(chuàng)建項(xiàng)目

  • 在pycharm點(diǎn)擊菜單File->New Project..
  • .

  • 在彈出的New Project窗口中,選擇項(xiàng)目類型為Flask,在Location中填寫項(xiàng)目路徑,在Interpreter中選擇上一節(jié)創(chuàng)建的虛擬環(huán)境,然后點(diǎn)擊create按鈕

  • 在彈出的Open Project窗口中選擇打開的方式,可以在新窗口,也可以在當(dāng)前窗口,選擇后點(diǎn)擊ok按鈕

  • 項(xiàng)目創(chuàng)建完成,在pycharm的project面板顯示目錄結(jié)構(gòu)如下圖

  • 文件名稱與項(xiàng)目名稱一致,當(dāng)前為test1.py
  • 目錄static用于存放靜態(tài)文件
  • 目錄templates用于存放模板文件
  • 點(diǎn)擊pycharm右上角的綠色三角可以啟動(dòng)項(xiàng)目,如下圖

  • 運(yùn)行效果如下圖

  • 修改啟動(dòng)代碼如下,設(shè)置debug=True,再改動(dòng)代碼時(shí)服務(wù)器會(huì)自動(dòng)重啟
if __name__ == '__main__':app.run(debug=True)
  • 關(guān)閉服務(wù)器后再重新啟動(dòng)就會(huì)生效

設(shè)計(jì)模型

  • 此例中設(shè)計(jì)作者、圖書兩個(gè)模型類,作者-圖書為一對(duì)多關(guān)系
  • 在mysql中創(chuàng)建數(shù)據(jù)庫(kù)test1
create database test1 charset=utf8;

2、配置mysql數(shù)據(jù)庫(kù)

  • 安裝包flask-mysqldb,用于Flask與mysql交互
pip install MySQL-python==1.2.5
  • 安裝包Flask-SQLAlchemy,用于ORM轉(zhuǎn)換
pip install flask-sqlalchemy==2.3.2
  • 打開test1.py文件
  • 引入類SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
  • 在app下面編寫數(shù)據(jù)庫(kù)配置
#設(shè)置連接數(shù)據(jù)庫(kù)的URL app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test1' #創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象 db = SQLAlchemy(app)


3、定義模型類

  • 定義類如下
class Author(db.Model):__tablename__ = 'author'id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(32), unique=True)def __init__(self, name):self.name = nameclass Book(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(32), unique=True)author = db.Column(db.Integer, db.ForeignKey('author.id'))def __init__(self, title, author):self.title = titleself.author = author

數(shù)據(jù)操作

  • 在啟動(dòng)程序中創(chuàng)建表
if __name__ == '__main__':db.create_all()app.run()
  • 繼續(xù)編寫代碼,添加示例數(shù)據(jù)
db.create_all()author1 = Author('金庸')author2 = Author('瓊瑤')db.session.add_all([author1, author2])db.session.commit()book11 = Book('射雕英雄傳', author1.id)book12 = Book('天龍八部', author1.id)book13 = Book('雪山飛狐', author1.id)book21 = Book('還珠格格', author2.id)book22 = Book('情深深雨濛濛', author2.id)book23 = Book('梅花三弄', author2.id)db.session.add_all([book11, book12, book13, book21, book22, book23])db.session.commit()app.run()
  • 點(diǎn)擊運(yùn)行啟動(dòng)服務(wù)器,此時(shí)可以到mysql中查詢表和數(shù)據(jù),表已經(jīng)被創(chuàng)建,并且數(shù)據(jù)也加入成功

編寫視圖

  • 視圖的本質(zhì)就是函數(shù)
  • 打開test1.py
  • 定義函數(shù)authorlist,查詢所有作者信息
def authorlist():alist = Author.query.all()return '作者列表'
  • 定義函數(shù)booklist,接收作者編號(hào),查詢指定作者的所有圖書
def booklist(aid):blist = Book.query.filter(Book.author == aid)return '指定作者的圖書列表'

4、URL配置

  • flask的運(yùn)行過程與django的過程是一樣的,如下圖

  • 定義完成視圖函數(shù)后,需要為函數(shù)配置url,才可以通過瀏覽器請(qǐng)求到這個(gè)函數(shù)
  • 為authorlist配置url
@app.route('/alist/') def authorlist():alist = Author.query.all()return '作者列表'
  • 運(yùn)行服務(wù)器,在瀏覽器中可以查看訪問效果,訪問作者列表的地址如下
http://127.0.0.1:5000/alist/
  • 為booklist配置url,注意從地址中獲取參數(shù)
@app.route('/blist/<aid>/') def booklist(aid):blist = Book.query.filter(Book.author == aid)return '指定作者的圖書列表'
  • 訪問圖書列表的地址如下,其中1表示作者的編號(hào)
http://127.0.0.1:5000/blist/1/

5、定義模板

  • 與django一樣,html可以當(dāng)作模板使用,可以編寫html、css、js代碼,也可以編寫模板語言的代碼
  • 不同的是flask使用的模板語言名稱為jiaja2,這種語言與django模板語言十分相似
  • 在test1.py文件上部引入模板函數(shù)
from flask import render_template
  • 修改hello_world函數(shù)如下,調(diào)用模板
@app.route('/') def hello_world():return render_template('hello.html')
  • 在templates目錄下創(chuàng)建hello.html文件,內(nèi)容如下
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>hello flask</h1> </body> </html>
  • 在瀏覽器中請(qǐng)求效果如下圖

  • 可以通過函數(shù)向模板中傳遞數(shù)據(jù),修改代碼如下
@app.route('/') def hello_world():return render_template('hello.html',title='flask',list1=range(5))
  • 修改模板代碼如下
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>hello {{ title }}</h1> <ul>{% for i in list1 %}<li>{{ i }}</li>{% endfor %} </ul> </body> </html>
  • 刷新瀏覽器,運(yùn)行效果如下圖



作者列表

  • 修改authorlist函數(shù),調(diào)用模板
@app.route('/alist/') def authorlist():alist = Author.query.all()return render_template('alist.html',alist=alist)
  • 編寫模板alist.html,代碼如下
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <ul>{% for author in alist %}<li><a href="/blist/{{ author.id }}/">{{ author.name }}</a></li>{% endfor %} </ul> </body> </html>

圖書列表

  • 修改authorlist函數(shù),調(diào)用模板
@app.route('/blist/<aid>/') def booklist(aid):blist = Book.query.filter(Book.author == aid)return render_template('blist.html',blist=blist)
  • 編寫模板blist.html,代碼如下
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <ul>{% for book in blist %}<li>{{ book.title }}--{{ book.author }}</li>{% endfor %} </ul> </body> </html>

  • 本示例完成后效果如下圖,在首頁(yè)中顯示所有的作者信息

  • 通過作者鏈接,可以顯示所有的圖書信息


總結(jié)

以上是生活随笔為你收集整理的Flask简介与简单项目操作流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。