from flask import Flask,redirect,url_for,render_template,abort,Response
import json
from flask import make_response,request
app=Flask(__name__, template_folder='./templates',static_folder="",static_url_path="")
#自定義過濾器
#1.過濾器函式add_template_filter
#呼叫偶數位的值
def filter(ls):
return ls[::2]
app.add_template_filter(filter,'fa')
#2.裝飾器函式 app.template_filter
#實現倒序正序
@app.template_filter('fl')
def fl(ls,x):
if ls[x]:
if x==0:
ls.sort()
if x==1:
ls.sort(reverse=True)
return ls
#預設為GET請求方式,先進行GET請求
@app.route('/hello',methods=['GET','POST'])
def hello1():
name={1:'one',2:'two'}
return json.dumps(name)
@app.route('/hello/<int:name>',methods=['GET'])
def hello2(name):
return 'hello2,%s'%name
#404頁面 1.自定義錯誤頁面
@app.route('/use/<id>')
def get_use(id):
if int(id)<10:
abort(404)
elif int(id)>20:
resp=Response('login fail')
abort(resp)
return '<h1>hello,%s</h1>'%id
#2.自定義錯誤頁面
@app.errorhandler(404)
def error(err):
return 'hello,this is a %s'%err
@app.route('/error1')
def err1():
error1=('index error',666,[('key','div'),('value','zero')])
return error1
@app.route('/error2')
def err2():
error2=('login error',444,{'serise':'100','dataframe':'200'})
return error2
@app.route('/error3')
def err3():
resp=make_response('search error')
resp.status='900'
resp.headers['hrr']='zjj'
resp.headers['hw']='zj'
return resp
import time
@app.route('/log', methods = ['GET','POST'])
def login1():
ip=request.remote_addr
aa=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
if request.method == 'GET':
data={'name':'HJ',
'age':20,
'dict':{'city':'cs'},
'list':[0,1,2,3],
'int':1
}
return render_template('login.html',**data,use_ip=ip,time=aa)
else:
user='username' in request.form and request.form['username']
pa='password' in request.form and request.form['password']
if user or pa:
if user=='admin' and pa=='admin':
return '登入成功,'+' '+'使用者名稱為'+user+' '+'密碼為'
elif user=='' or pa =='':
return '登入失敗,沒有輸入使用者名稱或者密碼'
else:
return '登入失敗,沒有該使用者'
else:
return '頁面維護敬請期待'
#不同的裝飾器修飾同樣的檢視函式
#兩個路徑指向一個地址
@app.route('/hw')
@app.route('/zj')
def love():
#跳轉目標網頁 通過鍵值對來寫入資料
#return render_template('login.html',name='HW',age=25)
return render_template('login.html')
#重定向
#通過檢視函式訪問另一個裝飾器
@app.route('/hq')
def aq():
qw='/hello'
return redirect(qw)
#訪問hrr的檢視跳轉到hell1的函式
@app.route('/hrr')
def ai():
#找到裝飾器下檢視函式對應的路徑url_for
qq=url_for('hello1')
return redirect(qq)
#路由提取引數賦值,使用轉換器,此時是int
@app.route('/hmm/<int:hmm_id>') #轉換器型別三種:int float path
def hm(hmm_id):
return 'hmm_id:%s'%hmm_id
#不使用轉換器 此時型別是字串,除了/
@app.route('/zjj/<zjj_id>')
def zjj(zjj_id):
return 'zjj_id:%s'%zjj_id
if __name__=='__main__':
# app.config.update(DEBUG=True) # 引數形式配置
#print(isinstance(app.config, dict)) # True
#app.config.from_pyfile(r'C:\\Users\\Administrator\\Desktop\\demo1\\config.cfg') # 載入配置檔案
app.run('127.0.0.1','9000')
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>ip:<strong>{{use_ip}}</strong></p>
<p>Time:<strong>{{time}}</strong></p>
<p>{{'hello,world'|capitalize|reverse}}</p>
<p>{{[2,3,2,3432,23,21,434,4323]|sort}}</p>
<p>{{[2,3,2,3432,23,21,434,4323]|fa}}</p>
<p>{{[2,3,2,3432,23,21,434,4323]|fl(1)}}</p>
<p>name={{name}}</p>
<p>age={{age}}</p>
<p>dict city={{dict['city']}}</p>
<p>dict city={{dict.city}}</p>
<p>list:{{list}}</p>
<p>list[int]:{{list[int]}}</p>
<p>list[1]+list[2]:{{list[1]+list[2]}}</p>
<form action="" method="post">
<p>使用者名稱:<input type="text" placeholder='username' name="username"></p>
<p> 密碼:<input type="password" placeholder='password' name="password"></p>
<input type="submit" value="login"><br/>
<p><img src="{{url_for('static',filename='timg.jpg')}}"/></p>
</form>
</body>
</html>