flask是一個很精簡,靈活的框架,對於web的開發很是的好,具備jinja2強大的模板引擎的支持,對於web的開發,很是的好,今天就來講說flask框架的一個擴展就是咱們的sqlalchemy,它有什麼有有點了,爲什麼要使用它,mysql mongodb等等數據庫均可以啊,爲什麼要使用sqlalchemy這個擴展了,主要有如下幾個有點.在這裏,什麼是關係型數據庫,什麼是非關係型數據庫,這裏就很少作介紹了。主要看看sqlalchemy這個擴展的有點。css
sqlalcheny是flask的一個擴展。是一個強大的關係型數據庫框架,這裏要注意的就是它是一個框架,並非咱們的數據庫。既然他不是一個數據庫,爲什麼可以實現對數據庫的操做了。咱們知道關係型數據庫的操做要寫一些比較繁瑣的sql語句,也就是咱們的機構化語句,那麼它是如何實現的了,其實在這就得益於咱們的ORM技術,將繁瑣的數據庫操做轉化爲咱們的python的類,在底存,其實仍是轉化爲sql語句來操做數據庫,這就是他的強大的地方,同時特提供了數據庫原生的SQL底存功能。總的一句話:它提供了高層 ORM,也提供了使用數據庫原生 SQL 的低層功能。這點作的很是的好,咱們就能夠不用記住sql的命令,直接操做數據庫。該框架是flask的一個擴展。html
flask-sqlalchemy
這是SQLAlchemy在flask框架下的拓展。SQLAlchemy是一個Python下的SQL和對象關係映射(ORM)的一個工具。使用它可以輕鬆將sql語句轉換爲對象操做,高效而有效。
pymysql(python3使用)
這是一個python鏈接MySQL的擴展。添加這個擴展能夠輕鬆的爲SQLAlchemy鏈接MySQL數據庫。python
鏈接數據庫mysql
在config.py中添加數據庫相關信息web
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@localhost:3306/mis_db?charset=utf8' SQLALCHEMY_TRACK_MODIFICATIONS = False
引入SQLAlchemy拓展並設置db對象sql
#導入SQLAlchemy拓展,方便對MYSQL操做 from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__) app.config.from_object(config) db.init_app(app)
class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(20), nullable=False) nickname = db.Column(db.String(20), nullable=False) userphone = db.Column(db.String(20), nullable=False) _password = db.Column(db.String(200), nullable=False)#內部使用
@app.route('/') def test(): context = { 'question': Question.query.order_by('-creat_time').all() } return render_template('test1.html', **context)
run() 方法能夠方便地啓動一個本地開發服務器,每次修改應用以後都須要手動重啓服務器。若是想要每次修改應用以後,服務器可以自動重啓,那麼能夠打開調試模式。而且當應用出錯時還會提供一個有用的調試器。mongodb
方法是將app.run()改成app.run(debug=True)數據庫
如今咱們把app應用進行一下調整,讓它出錯,這樣在執行的時候,就會自動調出調試器flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__) app.config.from_object(config) db.init_app(app)
@app.route('/')
def test(): context = { 'question': Question.query.order_by('-creat_time').all() } return render_template('test1.html', **context)
if __name__ == '__main__': app.run(debug=True)
頁面呈現bootstrap
首先是對模板的介紹,jinja2模板渲染有着很強大的功能,能夠幫助咱們實現動態,繼承的需求.經過傳入參數,咱們能夠直接動態的爲模板綁定變量.經過繼承,能夠大大的減小所須要的Html的代碼量.而且更好的組織結構.對於繼承,jinjia2模板採用的是{%block %}content{%endfor%}的模式來實現的,咱們能夠在模板裏面添加或者重置咱們須要的東西.若是須要添加,就應該用{{super()}}的形式,先添加愛base模板的內容.
因爲對錶單進行樣式的設置是一件比較枯燥的事情,因此咱們能夠選擇flask-bootstrap這個輕量級的flask擴展,它是對botstrap進行了flask的包裝,利用它,咱們能夠直接用bootstarp的樣式表設置表單.這樣又節省了不少的時間.同時bootstrap官方還有不少例子,這些例子都是能夠直接複製下來就用的.很容易學習模仿.同時bootstrap還提供了不少對錶單的驗證函數.像對email的驗證之類的.咱們的例子就是在bootstrap的base.html的基礎上進行繼承的.
在響應表單的時候,採起了重定向的技術,讓刷新的的最後一個請求不是POST而是GET.
<!DOCTYPE html> <html lang="en"> <head> {% extends 'test1.html' %} <meta charset="UTF-8"> <title>{% block title %} 首頁 {% endblock %}</title> {% block head %} <link rel="stylesheet" href="{{ url_for('static',filename='css/admin.css') }}"> {% endblock %} </head> <body> {% block body %} <p>{{ user }}context</p> <div class="col-md-4 column"> <ul> {% for foo in question %} <div class="wai"> <li class="have-img"> <div class="content"> <div class="author"> <a class="avatar" target="_blank" href="/u/deeea9e09cbc"> <img class="img" src="//upload.jianshu.io/users/upload_avatars/1442902/b54c023e8862.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/64/h/64" alt="64"> </a> <a href="{{ url_for('usercenter',user_id = foo.author_id,tag=1) }}">{{ foo.author.username }}</a> <span class="badge">{{ foo.creat_time }}</span> </div> <a style="font-size: 20px" class="stitle" target="_blank" href="{{ url_for('detail',question_id=foo.id) }}">{{ foo.title }}</a> <p class="abstract"> {{ foo.detail }}</p> <div class="meta"> <a class="collection-tag" target="_blank" href="/c/1hjajt">{{ biaoqian }}</a> <a href="{{ url_for('usercenter',user_id = foo.author_id,tag = 1) }}">{{ foo.author.username }}評論:({{ foo.comment|length}})</a> </div> </div> </li> </div> {% endfor %} </ul> </div> {% endblock %} </body> </html>
總結:
自從跟着老師學習了flask框架後,感受計算機語言仍是有一點樂趣的,不至於很是枯燥無味的,看着本身設計的頁面,雖然仍是很不規範,可是當看到它能運行並呈如今電腦的屏幕上,心情是無比的雀躍,也所以增長了自信,也深深的喜歡上這門課。
在學習過程當中也讓我更加明白了在學習過程當中不懂要多問、多動手,如今信息技術那麼發達,除了老師課堂上傳授的知識以外還要本身去多加摸索以及學習!flask框架在網上有不少學習網站都是可讓咱們學習和借鑑的!