初識flask框架

flask簡介

Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。優點是耦合度大幅度降低,提升了可擴展空間,缺點是複雜了維護性。

創建flask

使用pycharm工具,首先需要在虛擬環境其中安裝flask,然後直接創建即可,因爲pycharm支持創建flask框架。

分析自動生成的文件

static:主要存放靜態頁面、js、css、圖片之類的文件,可以通過兩種方式去調用,有和
templates:主要存放前後端分離的頁面,有後端的存在,調用時需要.do方法。
app.py:初始生成的,也是執行文件,內部代碼中,先引入flask庫的一些模塊,然後定義app變量,寫url路由,定義函數,調用變量的run方法執行。

手動添加的配置文件

有三種方式(任選其中一個):
1.腳本中直接寫入(app.py中)

app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'AADASDHASBKJASHAKJ'  #設置項目全局安全密鑰

2.單獨的配置文件(新建的配置文件config.py)

'''
自定義配置文件(正式發佈時的配置文件)
'''
DEBUG = True
SECRET_KEY = 'ASDQWEZXCEFGDFGFSDA'
PAGE_SIZE = 10   #每頁顯示10條

SERVER_ADDR = '10.0.14.45'   #地址號,用自己的,默認爲127.0.0.1
SERVER_PORT = '8080'    #端口號,用自己的,默認爲5000

3.定義不同的配置類,想用哪個調用哪個(新建的配置類文件config_class.py)

#都是key—value結構
class DebugConfig():
    DEBUG = True
    SECRET_KEY = 'ASDQWEZXCEFGDFGFSDA'
    PAGE_SIZE = 10  # 每頁顯示10條
    pass
class DevelomentConfig():
    DEBUG = True
    SECRET_KEY = 'ASDQWEZXCEFGDFGFSDA'
    PAGE_SIZE = 10  # 每頁顯示10條
    pass
class TestConfig():
    DEBUG = True
    SECRET_KEY = 'ASDQWEZXCEFGDFGFSDA'
    PAGE_SIZE = 10  # 每頁顯示10條
    pass

添加項目(html、css、img、js等)

因爲學習flask之前必須會前端技術,所以應該已經有前端項目了,直接將已經建立好的html文件放入指定位置(上面有)即可。然後根據需求合理調用(python和html有不同,尤其是引入文件方面)

代碼示例(內附說明)

其中,/代表根地址,/biaoform.do代表執行到前面的地址,每有一個前後端分離的頁面就要有一個路由,同時有一個.do
app.py文件

from flask import Flask,render_template,request,session
import config    #引入配置文件
from config_class import *  #引入類的配置文件

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'AADASDHASBKJASHAKJ'  #設置項目全局安全密鑰

#使用config.py文件
app.config.from_object(config)#用文件配置文件
#使用config_class.py文件
app.config.from_object(DebugConfig)#用類的配置文件
#config是字典類型


@app.route('/') #url路由
def index():
    return render_template('index.html')

@app.route('/login.do',methods=['POST','GET']) #登陸界面的路由
def login():
    #傳統方法獲取名字和密碼
    username = request.form.get('username')  #表單提交的數據,用request.form.get來取,如果是鏈接,用args.get
    userpwd = request.form.get('userpwd')
    #校驗
    if username == 'zhangsan' and userpwd == '123456':
        session['username'] = 'zhangsan'
        return render_template('index.html')#成功進入主頁
        pass
    elif username != None and (username != 'zhangsan' or userpwd != '123456'):
        return render_template('login.html',message='用戶名或密碼錯誤')
    return render_template('login.html')#否則返回登錄頁

@app.route('/biao.do',methods=['POST','GET']) #登陸界面的路由
def biao():
    return render_template('biao.html')
    pass

@app.route('/biaoform.do',methods=['POST','GET']) #登陸界面的路由
def biaoform():
    return render_template('index.html')
    pass

if __name__ == '__main__':
    app.run( host='10.0.14.45', port=8080, debug=True)   #先將flask_debug打開,然後用腳本,python app.py
    #等同於  host=app.config['SERVER_ADDR'],port=app.config['SERVER_PORT']

(登陸界面)login.html
其中{{}}是python的寫法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陸界面</title>
</head>
<body>
    <form action="/login.do" method="post">
        <table>
            <span color="red">{{ message }}</span>
            <tr>
                <td>用戶名:</td><td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>密碼:</td><td><input type="password" name="userpwd" /></td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input type="reset" value="重置" />
                    <input type="submit" value="提交" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

(主界面)index.html

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>徵婚啓事</title>
		<link rel="stylesheet" href="{{ url_for('static',filename ='css/2.css',_external = True) }}" />
        <!--<link rel="stylesheet" href="static/css/2.css" />-->
	</head>

	<body>
		<div id="header">
                <div>
                    <a href="/login.do">
                        {% if session.get('username')==None %}
                        登陸
                        {% else %}
                        {{ session.get('username') }}
                        {% endif %}
                    </a>
                </div>
				<div class="continer">
					姓名
					<div id="name">臨潼</div>
				</div>
				<div class="continer">
					年齡
					<div id="age">21</div>
				</div>
				<div class="continer">
					住址
					<div id="address">湯臣一品</div>
				</div>
				<div class="continer">
					身價
					<div id="money">數以億計</div>
				</div>
				<div class="continer">
					背景
					<div id="bat">某知名大佬</div>
				</div>
				<div class="continer">
					戀愛經驗
					<div id="love">無</div>
				</div>
		</div>

		<div id="main">
			<div id="left">
					<img src="{{ url_for("static",filename="img/timg.jpg") }}"/>
			</div>

			<div id="middle">
				<iframe width="100%"height="800px" name="innerframe" id="ie">

                </iframe>
			</div>

			<div id="right">
				<div id="rightdata">
					<a href="/biao.do" target="innerframe">同意點此</a>
				</div>
			</div>

		</div>

		<div id="footer">
			<b>@author:lint
			@time:2019.9.20
			@tel:123456789
			</b>
		</div>

	</body>

</html>
<script type="text/javascript">
	bgarray = ['static/img/1.jpg','static/img/2.jpg','static/img/3.jpg']
	i = 0
	function changeBackGround(){
		if (i<bgarray.length){
			document.getElementById('ie').style.backgroundImage = 'url('+bgarray[i]+')'
			i++
		}else{
			i = 0
			document.getElementById('ie').style.backgroundImage = "url('static/img/timg (2).jpg')"
		}
	}
	if(i==0){
		document.getElementById('ie').style.backgroundImage = "url('static/img/timg (2).jpg')"
	}
	
	setInterval(changeBackGround,2000)//兩秒(2000毫秒)換圖片         setInterval無限循環
</script>

(另一個界面iframe調用的)biao.html

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="static/css/biao.css" />
		<script type="text/javascript">
			function houhui(){
				alert("生不生隨你");
				alert("保大");
				alert("跟誰姓都行");
				alert("男女都一樣");
				alert("我媽會游泳");
				alert("房證你名");
				alert("工資卡給你");
				alert("重新考慮一下好嗎(*^_^*)")
			}
		</script>
	</head>

	<body>
		<form method="post" action="/biaoform.do">
			<fieldset id="">
					<div id="left">
						<h1>婚書</h1> 姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名:
						<input type="text" /><br /> 個人圖像:
						<input type="file" name="picture" /><br /> 年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;齡:
						<input type="text" name="age" /><br /> 宣誓內容:
						<textarea rows="10" cols="50">宣誓:</textarea><br /> 愛&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好:
						<input type="checkbox" name="hoby" />做飯
						<input type="checkbox" name="hoby" />洗碗
						<input type="checkbox" name="hoby" />做家務
						<input type="checkbox" name="hoby" />帶孩子
						<input type="checkbox" name="hoby" />掙錢
						<input type="checkbox" name="hoby" />洗衣服<br />
						<!--選項卡 selected="selected"默認選中-->
						住&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;房:
						<select name="city">
							<option value="1" selected="selected">上海</option>
							<option value="2">北京</option>
							<option value="3">廊坊</option>
						</select><br />
						<input type="submit" value="確定" id="button"  onclick="javascript:alert('恭喜你,做了最正確的決定!')"/>
						<input type="button" id="houhuia" value="放棄" onclick="houhui()"/>
					</div>
					<div id="footer">
						<img src="{{ url_for("static",filename="img/timg (1).jpg") }}" />
					</div>
			</fieldset>
		</form>
	</body>

</html>

存在小bug,iframe比較噁心,如果不用的話,可以很完美的實現,只是因爲太過簡單,不想改,如果有更完美的頁面的話,就沒事了,主要提供一個方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章