中文字幕 日本 在线 高清,久久精品国产99精品国,超碰人人香蕉,一区二区三区无码高清视频

是時候學習Web開發(fā)了,1小時用Python開發(fā)一個博客系統(tǒng)

來源:麥叔編程

作者:麥2叔

開發(fā)一個包含數(shù)據(jù)庫的簡單網站系統(tǒng)是Web開發(fā)入門的最好方式。

Flask是Python最熱門的兩個Web框架之一,是最簡單易用,容易上手的框架。

本系列使用Python的Flask框架開發(fā)一個簡易的博客系統(tǒng),共用時約90分鐘。整個文章分為3部分,今天是第「2」部分。第3部分本周日發(fā)布。

?

原計劃是分成2部分,篇幅有點長,臨時改成了3部分。

?

第1部分的鏈接:

是時候學習Web開發(fā)了!1小時用Python開發(fā)博客系統(tǒng)【1】

整個文章包括以下內容,第1部分涵蓋前5部分,今天包含中間的3部分:

  1. 安裝flask
  2. 創(chuàng)建項目
  3. 運行你的第一個網站
  4. 創(chuàng)建一個像樣的網頁
  5. 用樣式表美化網頁
  6. 「使用模板和bootstrap」
  7. 「創(chuàng)建文章數(shù)據(jù)庫」
  8. 「顯示所有的文章」
  9. 顯示一篇文章
  10. 發(fā)布新文章
  11. 修改文章內容
  12. 刪除文章
  13. 關于麥叔頁面

今天的文章信息量有點大,所有源代碼都可以關注公眾號「麥叔編程」,回復「fff」獲得鏈接。

我們開始吧!上次我們已經創(chuàng)建好了flask程序和一個應用了基本樣式的頁面:

是時候學習Web開發(fā)了,1小時用Python開發(fā)一個博客系統(tǒng)

一、使用模板和Bootstrap

我們要繼續(xù)「美化」頁面。

大部分網站都有很多頁面,這些頁面都會共用同樣的菜單欄。總不能開發(fā)沒頁面的時候都要把菜單欄寫一遍吧?

這里就用到了「模板」的概念,我們創(chuàng)建一個模板,模板包含了菜單等共同的部分,而具體頁面只要往模板中填空就行了。

我們的博客最終的樣式是這樣的,它包含了「列表」,「新建」「詳情」,「修改」「關于麥叔」等多個頁面。這些頁面共用同一個模板。

是時候學習Web開發(fā)了,1小時用Python開發(fā)一個博客系統(tǒng)

1.下載JavaScript和CSS文件

我們需要用到jquery和bootstrap,先去我的git上下載這幾個文件,下載方法:關注麥叔編程,回復210820。

下載完后分別放在static目錄下的css和js目錄下。其中js目錄需要先創(chuàng)建出來。

是時候學習Web開發(fā)了,1小時用Python開發(fā)一個博客系統(tǒng)

2.在templates目錄下創(chuàng)建一個新的文件:base.html

<!doctype html><html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="{{ url_for('static', filename= 'css/bootstrap.min.css') }}"> <title>{% block title %} {% endblock %}</title> </head> <body> <nav class="navbar navbar-expand-md navbar-light bg-light"> <a class="navbar-brand" href="{{ url_for('index')}}">麥叔的博客</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> <li class="nav-item active"> <a class="nav-link" href="#">關于麥叔</a> </li> </ul> </div> </nav> <div class="container"> {% block content %} {% endblock %} </div> <script src="{{url_for('static', filename='js/jquery.slim.min.js')}}" ></script> <script src="{{url_for('static', filename='js/popper.min.js')}}" ></script> <script src="{{url_for('static', filename='js/bootstrap.min.js')}}" ></script> </body></html>

這里面信息量有點大,我來一個個解釋:

  • 使用url_for方法引入了前面下載的1個css文件和3個js文件。之前我們創(chuàng)建的style.css文件就沒用了,可以刪除了。
  • 在開頭部分的{% block title %} {% endblock %}是標題(title)占位符,相當于定義了名為title的變量,后面會被具體內容替換掉。
  • 在中間部分的{% block content %} {% endblock %}是網頁內容的占位符,相當于定義了名為content的變量,后面會被具體內容替換掉。

是時候學習Web開發(fā)了,1小時用Python開發(fā)一個博客系統(tǒng)

  1. 修改index.html中的內容{% extends 'base.html' %}
    {% block content %}
    <h1>{% block title %} 歡迎來看麥叔的博客 {% endblock %}</h1>
    {% endblock %}
  2. 第一行extends 'base.html'表示我們要使用前面定義的base.html這個模板。要使用這個模板,就要把模板中的兩個占位符(兩個填空題)給填寫好。
  3. 放在{% block content %}和{% endblock %}中間的所有內容都會填寫在content這個占位符中。
  4. 放在{% block title %}和{% endblock %}中間的內容會填寫在title占位符中。注意這里的title變量會被重用。它既是title占位符的內容,也是content占位符的一部分。
  5. 刷新頁面,應該看到如下的效果。如果不是,仔細檢查一下哪里是不是漏掉了,或者拼寫錯誤了。這里雖然沒有很大的變化,但是我們已經搭建好了模板,以后開發(fā)的頁面內容都可以重用這個模板,而頁面本身會變得很簡單。

二、創(chuàng)建文章數(shù)據(jù)庫

博客系統(tǒng)會有很多文章,我們要把這些文章保存到數(shù)據(jù)庫。

數(shù)據(jù)庫有很多選擇,比如MySQL, postgresql,Oracle, sqlite3等。

我們今天要使用最輕量級的數(shù)據(jù)庫sqlite3,Python自帶了這個庫,所以不需要額外安裝。

  1. 在blog.py同目錄下創(chuàng)建一個文件db.sql,里面是創(chuàng)建數(shù)據(jù)庫表的SQL語句:DROP TABLE IF EXISTS posts;
    CREATE TABLE posts (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    title TEXT NOT NULL,
    content TEXT NOT NULL
    );
  2. 首先看看posts表是否存在,如果存在,先刪除它。
  3. 創(chuàng)建一個名為posts的表,其中包含id,title,content以及創(chuàng)建時間(created)等字段。
  4. 在blog.py同目錄下創(chuàng)建文件init_db.py這是一個python代碼文件,它連接到sqlite數(shù)據(jù)庫,執(zhí)行上面的db.sql中的語句,然后再插入兩條文章。具體細節(jié)見注釋:import sqlite3
    # 創(chuàng)建數(shù)據(jù)庫鏈接
    connection = sqlite3.connect('database.db')
    # 執(zhí)行db.sql中的SQL語句
    with open('db.sql') as f:
    connection.executescript(f.read())
    # 創(chuàng)建一個執(zhí)行句柄,用來執(zhí)行后面的語句
    cur = connection.cursor()
    # 插入兩條文章
    cur.execute("INSERT INTO posts (title, content) VALUES (?, ?)",
    ('學習Flask1', '跟麥叔學習flask第一部分')
    )
    cur.execute("INSERT INTO posts (title, content) VALUES (?, ?)",
    ('學習Flask2', '跟麥叔學習flask第二部分')
    )
    # 提交前面的數(shù)據(jù)操作
    connection.commit()
    # 關閉鏈接
    connection.close()
  5. 打開一個命令行,運行init_db.py如果沒有報錯,就會發(fā)現(xiàn)文件夾下多了database.db,這就是數(shù)據(jù)庫文件。

三、展示文章列表

現(xiàn)在數(shù)據(jù)庫里有兩篇文章,我們可以使用python從數(shù)據(jù)庫中獲取數(shù)據(jù),并且展現(xiàn)到網頁上。

  1. 修改blog.py,具體細節(jié)見注釋import sqlite3 #引入sqlite3
    from flask import Flask, render_template
    app = Flask(__name__)
    # 創(chuàng)建一個函數(shù)用來獲取數(shù)據(jù)庫鏈接
    def get_db_connection():
    # 創(chuàng)建數(shù)據(jù)庫鏈接到database.db文件
    conn = sqlite3.connect('database.db')
    # 設置數(shù)據(jù)的解析方法,有了這個設置,就可以像字典一樣訪問每一列數(shù)據(jù)
    conn.row_factory = sqlite3.Row
    return conn
    @app.route('/')
    def index():
    # 調用上面的函數(shù),獲取鏈接
    conn = get_db_connection()
    # 查詢所有數(shù)據(jù),放到變量posts中
    posts = conn.execute('SELECT * FROM posts').fetchall()
    conn.close()
    #把查詢出來的posts傳給網頁
    return render_template('index.html', posts=posts)
    @app.route('/about')
    def about():
    return render_template('about.html')
  2. 修改index.html之前只顯示了一個標題,現(xiàn)在要循環(huán)blog.py中傳過來的posts列表,把每一篇文章顯示出來。注意for循環(huán)在頁面中的寫法,和python代碼很類似,只不過要用{%和%}包起來。{% extends 'base.html' %}
    {% block content %}
    <h1>{% block title %} 歡迎來看麥叔的博客 {% endblock %}</h1>
    {% for post in posts %}
    <a href="#">
    <h2>{{ post['title'] }}</h2>
    </a>
    <span class="badge badge-primary">{{ post['created'] }}</span>
    <hr>
    {% endfor %}
    {% endblock %}
  3. 刷新頁面,應該可以看到這樣的效果:如果不行,仔細對比一下,看看少了什么或者有沒有拼寫錯誤。

今天就到這里了,后面的部分會在本周日發(fā)布,到時候也會發(fā)視頻到bilibili,請保持關注。

整個文章包括以下內容,第1部分涵蓋前5部分,今天包含后面的部分:

  1. 安裝flask
  2. 創(chuàng)建項目
  3. 運行你的第一個網站
  4. 創(chuàng)建一個像樣的網頁
  5. 用樣式表美化網頁
  6. 使用模板和bootstrap
  7. 創(chuàng)建文章數(shù)據(jù)庫
  8. 顯示所有的文章
  9. 「顯示一篇文章」
  10. 「發(fā)布新文章」
  11. 「修改文章內容」
  12. 「刪除文章」
  13. 關于麥叔頁面

版權聲明:本文內容由互聯(lián)網用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內容, 請發(fā)送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2023年5月19日 上午9:55
下一篇 2023年5月19日 上午10:11

相關推薦

  • 標書項目機構管理系統(tǒng)

    標書項目機構管理系統(tǒng) 隨著商業(yè)競爭的加劇和招標過程的不斷復雜化,標書項目機構管理系統(tǒng)已經成為標書制作過程中不可或缺的一部分。該系統(tǒng)可以幫助標書制作團隊更好地管理標書項目,提高制作效…

    科研百科 2024年12月17日
    0
  • 合同文書破解版

    合同文書破解版 合同文書是當事人雙方達成合意后簽訂的書面文件,具有法律效力。在生活和工作中,我們經常需要簽訂各種合同,如購房合同、勞動合同等。但是,對于一些不太熟悉的合同文書,有些…

    科研百科 2024年11月30日
    2
  • 出庫和入庫管理軟件

    出庫和入庫管理軟件是一種可以幫助企業(yè)進行商品進出庫管理的軟件,能夠幫助企業(yè)高效地管理庫存,提高生產效率,降低庫存成本,提高客戶滿意度。 出庫和入庫管理軟件通常包括以下功能: 1. …

    科研百科 2024年10月1日
    4
  • 組織部基層黨建“五基三化”提升年行動工作情況匯報(三基五化內容)

    今年以來,我部按照XX省委、市委關于基層黨建“五基三化”提升年行動工作要求,以A新時代中國特色社會主義思想為指導,全面貫徹落實黨的XX大精神,鞏固深化攻堅年行動成果,認真落實提升年…

    科研百科 2023年10月24日
    535
  • 辦公桌面虛擬化系統(tǒng)

    辦公桌面虛擬化系統(tǒng):改變工作方式的關鍵技術 隨著科技的不斷發(fā)展,越來越多的企業(yè)開始采用辦公桌面虛擬化系統(tǒng)來提高工作效率和生產力。辦公桌面虛擬化系統(tǒng)是一種將計算機系統(tǒng)和辦公設備虛擬化…

    科研百科 2025年1月4日
    1
  • 牡丹江科研項目有哪些

    牡丹江科研項目有哪些 近年來,隨著科技的不斷發(fā)展,許多科研項目在牡丹江市展開。這些項目涉及多個領域,包括自然科學、工程技術、生命科學等。以下是一些在牡丹江市展開的科研項目的介紹。 …

  • 高校管理系統(tǒng)項目計劃

    高校管理系統(tǒng)項目計劃 隨著高等教育的日益普及,高校管理系統(tǒng)的需求也越來越大。為了更好地管理學校的各項事務,提高學校的效率和管理水平,建立一個高效、智能、可靠的高校管理系統(tǒng)變得至關重…

    科研百科 2024年12月20日
    2
  • 云南白芨科研項目招標

    云南白芨科研項目招標 云南白芨科研項目正在招標,感興趣的小伙伴可以積極參加。云南白芨是一種重要的中藥,其功效獨特,被廣泛應用于中醫(yī)藥領域。此次科研項目招標旨在吸引優(yōu)秀的科研團隊和人…

    科研百科 2025年1月30日
    1
  • 科研項目立項申請書范文(科研項目立項評審表)

    近日,陜西省科技廳下達了陜西省2022年科技計劃,省地防所申報的《基于提升地方病病區(qū)健康素養(yǎng)的長效防控策略研究》、《含0.01%阿托品的玻璃酸鈉滴眼液在防控近視中的基礎研究》兩項科…

    科研百科 2022年5月15日
    650
  • 政策解讀:《金安區(qū)政府投資建設工程政府采購招標投標管理辦法》

    一、制定背景 為加強政府投資建設工程招投標和政府采購的監(jiān)督管理,深化“放管服”改革,提高招投標質量和效益,建立公開、公平、公正、誠信的市場秩序,依據(jù)《中華人民共和國招標投標法》和《…

    科研百科 2023年6月24日
    253