Flask入門實戰開發簡易博客-完整代碼

一.安裝虛擬環境virtualenv

爲什麼要安裝它:當你擁有的項目越多,同時使用不同版本的 Python 工作時,或者起碼需要不同版本的 Python 庫。可能出現的問題是有一些庫文件會破壞向後兼容性,當在你的項目中,出現兩個或更多依賴性衝突時,你會怎麼做?所以virtualenv提供了一種巧妙的方式來讓各項目環境保持獨立.

如果你在 Mac OS X 或 Linux 下,下面兩條命令可能會適用:

$ sudo easy_install virtualenv

或更好的:

$ sudo pip install virtualenv

如果你用的是 Ubuntu,可以嘗試:

$ sudo apt-get install python-virtualenv

二.全局安裝Flask

pip install Flask

三.創建項目blog

staic放CSS,JS,圖片等靜態資源;templates放模板文件;run.py是程序入口;config.py配置參數

四.創建數據庫,建表

五.編碼config.py配置操作數據庫參數 

HOST='127.0.0.1'
PORT=3306
USER='root'
PASSWORD='root'
DATABASE='blogDB'
CHARSET='utf8'

六.在templates文件夾下創建界面

公用模板layout.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8"/>
	<title>我的博客</title>
	<style type="text/css">
		html,body{
			margin: 0;
			padding: 0;
		}
		header,footer{
			padding: 30px 40px;
			background: #f2f2f2;
			color:#666;
		}
		header a{
			padding: 0 20px;
			color:#999;
			text-decoration: none;
		}
		header a:hover{
			color:#333;
		}
		footer{
			text-align: center;
		}
		#content{
			paddding: 30px 40px;
		}
	</style>
</head>
<body>
	<header>
		<a href="{{url_for('index')}}">首頁</a>
		<a href="{{url_for('list')}}">文章列表</a>
	</header>
	<div id="content">
		{% block body %}
		{% endblock %}
	</div>
	<footer>Copyright @ EasyBlog</footer>
</body>
</html>

首頁index.html

{% extends 'layout.html' %}	
{% block body %}
	<h1>歡迎來到我的博客</h1>
	<form action="{{url_for('handle')}}" method="post">
		<h4>添加文章</h4>
		<p>
			<input type="text" name="title" placeholder="標題" />
		</p>
		<p>
			<textarea name="content" cols="30" rows="10" placeholder="內容"></textarea>
		</p>
		<button type="submit">提交</button>
	</form>
{% endblock %}

文章列表list.html

{% extends 'layout.html' %}	
{% block body %}
	<style type="text/css">
		.row{
			padding: 30px;
			border: 1px solid #888;
			margin: 20px;
		}
	</style>
	<h1>文章列表</h1>
	<div id="list">
		{% for item in posts %}
		<div class="row">
			<h4><a href="{{url_for('post',post_id=item['id'])}}">{{item['title']}}</a></h4>
			<p>{{item['timestamp']}}</p>
		</div>
		{% endfor %}
	</div>
{% endblock %}

文章詳情post.html 

{% extends 'layout.html' %}	
{% block body %}
	<h1>文章內容</h1>
	<h4>{{post['title']}}</h4>
	<h5>{{post['timestamp']}}</h5>
	<p>{{post['content']}}</p>
{% endblock %}

七.編碼run.py

# coding:utf-8

import importlib,sys
importlib.reload(sys)

# 引入flask模塊
from flask import *

# 關閉警告信息
import warnings
warnings.filterwarnings('ignore')

# 引入MYSQL
import pymysql
from config import *

import time

app = Flask(__name__)
app.config.from_object(__name__)

# 連接數據庫
def connectdb():
	db = pymysql.connect(host=HOST, port=PORT, db=DATABASE, user=USER, passwd=PASSWORD, charset=CHARSET)
	cursor = db.cursor(cursor=pymysql.cursors.DictCursor)#默認元組 設置成字典
	return (db,cursor)

# 關閉數據庫
def closedb(db,cursor):
	cursor.close()
	db.close()

# 首頁
@app.route('/')
def index():
	return render_template('index.html')

# 處理表單提交
@app.route('/handle',methods=['post'])
def handle():
	# 獲取POST數據
	data = request.form
	# 連接數據庫
	(db,cursor) = connectdb()
	# 添加數據
	cursor.execute("INSERT INTO post(title,content,timestamp) VALUES(%s,%s,%s)",[data['title'],data['content'],str(int(time.time()))])
	# 最後添加行的id
	post_id = cursor.lastrowid
	# 關閉數據庫
	closedb(db,cursor)
	return redirect(url_for('post',post_id=post_id))

# 文章列表頁
@app.route('/list')
def list():
	# 連接數據庫
	(db,cursor) = connectdb()
	# 查詢數據庫
	cursor.execute('SELECT * FROM post')
	data = cursor.fetchall()
	# 格化時間
	for i in range(0,len(data)):
		data[i]['timestamp'] = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(float(data[i]['timestamp'])))
	# 關閉數據庫
	closedb(db,cursor)
	return render_template('list.html',posts=data)

# 文章詳情頁
@app.route('/post/<post_id>')
def post(post_id):
	# 連接數據庫
	(db,cursor) = connectdb()
	# 查詢數據庫
	cursor.execute('SELECT * FROM post WHERE id=%s',[post_id])
	data = cursor.fetchone()
	# 格化時間
	data['timestamp'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(float(data['timestamp'])))
	# 關閉數據庫
	closedb(db,cursor)
	return render_template('post.html',post=data)

if __name__ == '__main__':
	app.run(debug=True)

 其中route()裝飾器把一個函數綁定到對應的 URL 上。這樣index.html就可以跳轉到list.html界面了。要在界面之間進行參數傳遞,可以在URL綁定相應的變量。比如在文字列表頁面list.html跳轉到文字詳情界面post.html要傳遞文章id,那麼在list.html界面要傳遞參數id

八.配置venv

在博客項目根目錄建立venv文件夾

進入項目後,需要激活相應的環境。在 OS X 和 Linux 上,執行如下操作:

$ . venv/bin/activate

下面的操作適用 Windows:

$ venv\scripts\activate

注意shell 提示符顯示的是當前活動的環境

然後python run.py結果如下

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 330-801-124

 http://127.0.0.1:5000/ 就是項目根地址.

關閉虛擬環境deactivate命令

九.結束語

快速掌握一門語言,首先要進行快速入門,然後進行簡單的實戰,最後一步一步由熟悉到精通.

常用開發命令就那些,掌握它,開發能力至少達到70~80%左右

發佈了21 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章