期末做品檢查

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)

定義咱們的模型,在ORM中模型就是咱們的python的類,就是咱們的數據庫的列
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)#內部使用
 
路由和視圖函數。客戶端把請求發給 Web 服務器,Web 服務器再把請求發給 Flask 程序實例,Flask 程序實例須要知道每一個 URL 請求要運行哪些代碼,因此保存了一個 URL 到 Python 函數的映射關係。處理 URL 和函數之間關係的程序稱爲路由,這個函數稱爲視圖函數。
@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框架在網上有不少學習網站都是可讓咱們學習和借鑑的!

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息