Python Web框架Flask下網(wǎng)站開發(fā)入門實(shí)例
一、Flask簡介
Flask 是一個(gè) Python 實(shí)現(xiàn)的 Web 開發(fā)微框架。官網(wǎng):http://flask.pocoo.org/
二、Demo
1、代碼結(jié)構(gòu)
.
├── blog.py
├── static
│ ├── css
│ │ └── index.css
│ ├── images
│ │ ├── cat.jpg
│ │ └── sheying1229.jpg
│ └── js
└── templates
├── index.html
├── login.html
├── regist.html
└── upload.html
5 directories, 8 files
2、主程序blog.py
#!/usr/bin/python
#coding:utf8
from flask import Flask, render_template, url_for, request,redirect,make_response,session
import os,MySQLdb
app = Flask(__name__)
app.secret_key='afjlsjfowflajflkajfkjfkaljf'
user_list = ['jim','max','py']
imagepath = os.path.join(os.getcwd(),"static/images")
@app.route('/')
def index():
username = request.cookies.get('username')
if not username:
username = u'請(qǐng)先登錄'
islogin = session.get('islogin')
nav_list = [u'首頁',u'經(jīng)濟(jì)',u'文化',u'科技',u'娛樂']
blog = {'title':'welcome to my blog','content':'hello, welcome to my blog.'}
blogtag = {'javascript':10,"python":20,"shell":5}
img = url_for('static', filename="images/cat.jpg")
return render_template('index.html', nav_list=nav_list, username=username, blog = blog, blogtag = blogtag, img=img, islogin=islogin)
@app.route('/reg', methods=['GET','POST'])
def regist():
if request.method == 'POST':
username = request.form['username']
conn = MySQLdb.connect(user='root',passwd='admin',host='127.0.0.1')
conn.select_db('blog')
curr = conn.cursor()
sql = 'insert into `user` (`id`,`username`) values (%d,"%s")' % (1,username)
curr.execute(sql)
conn.commit()
curr.close()
conn.close()
return "user %s regist ok!" % request.form['username']
else:
#request.args['username']
return render_template('regist.html')
@app.route('/upload', methods=['GET','POST'])
def upload():
if request.method == 'POST':
username = request.form['username']
file = request.files['img']
filename = file.filename
file.save(os.path.join(imagepath,filename))
return "<img src='static/images/%s' alt=''/>" % filename
else:
return render_template('upload.html')
@app.route('/login/', methods=['GET','POST'])
def login():
if request.method == 'POST':
username = request.form.get('username')
if username in user_list:
response = make_response(redirect('/'))
response.set_cookie('username', value=username, max_age=300)
session['islogin'] = '1'
return response
else:
session['islogin'] = '0'
return redirect('/login/')
else:
return render_template('login.html')
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0',port=5000)
主要有首頁、注冊(cè)、登錄、上傳頁面。
blog.py主要是展示了Flask中常見功能用法:路由,數(shù)據(jù)庫操作,cookie,session,redirect,表單,文件上傳,調(diào)試,Web服務(wù)器的IP和端口,靜態(tài)文件讀取等。
3、首頁模板index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Flask DEMO</title>
<link rel="stylesheet" type="text/css" href="static/css/index.css"/>
</head>
<body>
<div class="header">
{%if islogin == '1' %}
<h1>Welcome ,{{username}}!</h1>
{%else%}
<h1>{{username}}!</h1>
{%endif%}
<div class="nav">
<ul>
{%for nav in nav_list%}
<li><a href="{{nav}}">{{nav}}</a></li>
{%endfor%}
</ul>
</div>
</div>
<div class="container">
<div class="item">
<h1>{{blog['title']}}</h1>
<div class="content">
<img src="/static/images/cat.jpg" alt="cat" />
<p>{{blog['content']}}</p>
<img src="{{img}}" alt="cat" />
</div>
</div>
<div class="side">
<ul>
{%for key,value in blogtag.items()%}
<li>{{key}}({{value}})</li>
{%endfor%}
</ul>
</div>
</div>
</body>
</html>
這個(gè)模板主要展示了在Flask模板中如何讀取各種類型的變量。
4、登錄頁面login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Login</title>
<link rel="stylesheet" type="text/css" href="static/css/index.css"/>
</head>
<body>
<div class="header">
<h1>Login</h1>
</div>
<div class="container">
<div class="item">
<form action="" method="post">
<input type="text" placeholder="please input username" name="username" /><br/>
<input type="submit" value="Login"/>
</form>
</div>
</div>
</body>
</html>
結(jié)合blog.py主要展示表單如何提交取值,cookie和session應(yīng)用。
5、注冊(cè)頁面regist.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Regist</title>
<link rel="stylesheet" type="text/css" href="static/css/index.css"/>
</head>
<body>
<div class="header">
<h1>Regist</h1>
</div>
<div class="container">
<div class="item">
<form action="" method="post">
<input type="text" placeholder="please input username" name="username" /><br/>
<input type="submit" value="Regist"/>
</form>
</div>
</div>
</body>
</html>
結(jié)合blog.py主要展示了數(shù)據(jù)庫操作。
6、上傳頁面upload.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Upload</title>
<link rel="stylesheet" type="text/css" href="static/css/index.css"/>
</head>
<body>
<div class="header">
<h1>Upload</h1>
</div>
<div class="container">
<div class="item">
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="username" /><br/>
<input type="file" name="img" /><br/>
<input type="submit" value="Upload"/>
</form>
</div>
</div>
</body>
</html>
結(jié)合blog.py主要展示了如何上傳文件。
7、運(yùn)行效果
相關(guān)文章
Python使用Apache Kafka時(shí)Poll拉取速度慢的解決方法
在使用Apache Kafka時(shí),poll方法拉取消息速度慢常見于網(wǎng)絡(luò)延遲、消息大小過大、消費(fèi)者配置不當(dāng)或高負(fù)載情況,本文提供了優(yōu)化消費(fèi)者配置、并行消費(fèi)、優(yōu)化消息處理邏輯和監(jiān)控調(diào)試的解決方案,并附有Python代碼示例和相關(guān)類圖、序列圖以幫助理解和實(shí)現(xiàn)2024-09-09Python參數(shù)傳遞機(jī)制傳值和傳引用原理詳解
這篇文章主要介紹了Python參數(shù)傳遞機(jī)制傳值和傳引用原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05python末尾逗號(hào)導(dǎo)致返回結(jié)果是一個(gè)元組的問題
在Python中,除非特別需要返回或傳參元組,一般不推薦在語句末尾添加逗號(hào),應(yīng)該注意檢查是否存在末尾逗號(hào)導(dǎo)致的這些副作用,這篇文章主要介紹了python末尾逗號(hào)導(dǎo)致返回結(jié)果是一個(gè)元組,需要的朋友可以參考下2023-09-09python實(shí)現(xiàn)bilibili動(dòng)畫下載視頻批量改名功能
這篇文章主要介紹了python實(shí)現(xiàn)bilibili動(dòng)畫下載視頻批量改名,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11