時(shí)間:2023-05-29 01:36:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-29 01:36:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
Python Web 開(kāi)發(fā)框架Flask快速入門:pip install flask
helloFlask.py
,編寫(xiě)代碼如下:from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run()
python helloFlask.py
app.run(host='0.0.0.0')
@app.route('/')def index(): return 'Index Page'@app.route('/hello')def hello(): return 'Hello World'
return
返回,這樣定義就太麻煩了吧,因?yàn)槎x字符串是不會(huì)出任何效果和錯(cuò)誤的,如果有一個(gè)專門定義前端頁(yè)面的地方就好了。templates
文件夾里尋找模板。所以,如果你的應(yīng)用是個(gè)模塊,這個(gè)文件夾應(yīng)該與模塊同級(jí);如果它是一個(gè)包,那么這個(gè)文件夾作為包的子目錄:template
文件夾下創(chuàng)建模板index.html
render_template()
方法來(lái)渲染模板。你需要做的一切就是將模板名和你想作為關(guān)鍵字的參數(shù)傳入模板的變量。這里有一個(gè)展示如何渲染模板的簡(jiǎn)例:from flask import render_template@app.route('/index/')def hello(name=None): name = "張三" return render_template('index.html', name=name)
index.html
中添加如下代碼:<!doctype html><title>Hello from Flask</title>{% if name %} <h1>Hello {{ name }}!</h1>{% else %} <h1>Hello World!</h1>{% endif %}
127.0.0.1:5000/index
即可看到如下結(jié)果:{{ 變量名 }}
key
和 value
:render_template('index.html', name="張三")
{% if name %}{% else %}{% endif %}
{% for i in range(1,10) %} {% for j in range(1,i+1) %} {{ j }} x {{ i }} = {{ i*j }} {% endfor %} <br>{% endfor %}
sql
語(yǔ)句,那么能不能不寫(xiě)sql
語(yǔ)句就可以操作數(shù)據(jù)庫(kù)呢? 答案是可以的。mysql
數(shù)據(jù)庫(kù),需要安裝一個(gè)flask-sqlalchemy
的擴(kuò)展。pip install flask-sqlalchemy
flask-mysqldb
pip install flask-mysqldb
test3
數(shù)據(jù)庫(kù),假設(shè)用戶名為root
,密碼為mysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test3'
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)#設(shè)置連接數(shù)據(jù)庫(kù)的URLapp.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test'#設(shè)置每次請(qǐng)求結(jié)束后會(huì)自動(dòng)提交數(shù)據(jù)庫(kù)中的改動(dòng)app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = Trueapp.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True#查詢時(shí)會(huì)顯示原始SQL語(yǔ)句app.config['SQLALCHEMY_ECHO'] = Truedb = SQLAlchemy(app)class Role(db.Model): # 定義表名 __tablename__ = 'roles' # 定義列對(duì)象 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) us = db.relationship('User', backref='role')class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True, index=True) email = db.Column(db.String(64),unique=True) pswd = db.Column(db.String(64)) role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))if __name__ == '__main__': db.drop_all() db.create_all() ro1 = Role(name='admin') ro2 = Role(name='user') db.session.add_all([ro1,ro2]) db.session.commit() us1 = User(name='wang',email='wang@163.com',pswd='123456',role_id=ro1.id) us2 = User(name='zhang',email='zhang@189.com',pswd='201512',role_id=ro2.id) us3 = User(name='chen',email='chen@126.com',pswd='987654',role_id=ro2.id) us4 = User(name='zhou',email='zhou@163.com',pswd='456789',role_id=ro1.id) db.session.add_all([us1,us2,us3,us4]) db.session.commit() app.run(debug=True)
db.create_all()
db.drop_all()
ro1 = Role(name='admin')db.session.add(ro1)db.session.commit()#再次插入一條數(shù)據(jù)ro2 = Role(name='user')db.session.add(ro2)db.session.commit()
us1 = User(name='wang',email='wang@163.com',pswd='123456',role_id=ro1.id)us2 = User(name='zhang',email='zhang@189.com',pswd='201512',role_id=ro2.id)us3 = User(name='chen',email='chen@126.com',pswd='987654',role_id=ro2.id)us4 = User(name='zhou',email='zhou@163.com',pswd='456789',role_id=ro1.id)db.session.add_all([us1,us2,us3,us4])db.session.commit()
User.query.filter_by(name='wang').all()
User.query.first()
User.query.all()
User.query.filter(User.name.endswith('g')).all()
User.query.get()
User.query.filter(User.name!='wang').all()
from sqlalchemy import and_User.query.filter(and_(User.name!='wang',User.email.endswith('163.com'))).all()
from sqlalchemy import or_User.query.filter(or_(User.name!='wang',User.email.endswith('163.com'))).all()
user = User.query.first()db.session.delete(user)db.session.commit()User.query.all()
user = User.query.first()user.name = 'dong'db.session.commit()User.query.first()
User.query.filter_by(name='zhang').update({'name':'li'})
#查詢r(jià)oles表id為1的角色ro1 = Role.query.get(1)#查詢?cè)摻巧乃杏脩?/span>ro1.us
#查詢users表id為3的用戶us1 = User.query.get(3)#查詢用戶屬于什么角色us1.role
from flask import Flask,render_template,request,redirectfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)db = SQLAlchemy(app)#設(shè)置數(shù)據(jù)庫(kù)連接app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:asd8283676@127.0.0.1:3306/web'#定義模型class City(db.Model): #表模型 id = db.Column(db.Integer,primary_key=True,autoincrement=True) provincename = db.Column(db.String(255)) cityname = db.Column(db.String(255)) usernumber = db.Column(db.Integer)#查詢所有數(shù)據(jù)@app.route("/select")def selectAll(): cityList = City.query.order_by(City.id.desc()).all() return render_template("index.html",city_list = cityList)@app.route('/')def index(): return selectAll()#添加數(shù)據(jù)@app.route('/insert',methods=['GET','POST'])def insert(): #進(jìn)行添加操作 province = request.form['province'] cityname = request.form['city'] number = request.form['number'] city = City(provincename=province,cityname=cityname,usernumber=number) db.session.add(city) db.session.commit() #添加完成重定向至主頁(yè) return redirect('/')@app.route("/insert_page")def insert_page(): #跳轉(zhuǎn)至添加信息頁(yè)面 return render_template("insert.html")#刪除數(shù)據(jù)@app.route("/delete",methods=['GET'])def delete(): #操作數(shù)據(jù)庫(kù)得到目標(biāo)數(shù)據(jù),before_number表示刪除之前的數(shù)量,after_name表示刪除之后的數(shù)量 id = request.args.get("id") city = City.query.filter_by(id=id).first() db.session.delete(city) db.session.commit() return redirect('/')#修改操作@app.route("/alter",methods=['GET','POST'])def alter(): # 可以通過(guò)請(qǐng)求方式來(lái)改變處理該請(qǐng)求的具體操作 # 比如用戶訪問(wèn)/alter頁(yè)面 如果通過(guò)GET請(qǐng)求則返回修改頁(yè)面 如果通過(guò)POST請(qǐng)求則使用修改操作 if request.method == 'GET': id = request.args.get("id") province = request.args.get("provincename") cityname = request.args.get("cityname") usernumber = request.args.get("usernumber") city = City(id = id,provincename=province,cityname=cityname,usernumber = usernumber) return render_template("alter.html",city = city) else: #接收參數(shù),修改數(shù)據(jù) id = request.form["id"] province = request.form['province'] cityname = request.form['city'] number = request.form['number'] city = City.query.filter_by(id = id).first() city.provincename = province city.cityname = cityname city.usernumber = number db.session.commit() return redirect('/')if __name__ == "__main__": app.run(debug = True,host='0.0.0.0',port=8080)
index.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>首頁(yè)</title></head><body> <div align="center"> <br> <a href="insert_page">添加城市</a> <br> <br> <table width="600" cellpadding="5" align="center" border="1" cellspacing="0"> <th align="center" colspan="4">城市信息</th> <tr> <td>province</td> <td>cityname</td> <td>usernumber</td> <td>操作</td> </tr> {% for item in city_list %} <tr> <td>{{item.provincename}}</td> <td>{{item.cityname}}</td> <td>{{item.usernumber}}</td> <td><a href='/alter?id={{item.id}}&provincename={{ item.provincename }}&cityname={{ item.cityname }}&usernumber={{item.usernumber}}'>編輯</a> <a href="/delete?id={{ item.id }}">刪除</a> </td> </tr> {% endfor %} </table> </div></body></html>
alter.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>修改</title></head><body><div class="layui-main"> <div class="site-content"> <br><br> <h1 class="site-h1">修改信息</h1> <br><br> <form class="layui-form" action="alter" method="post"> <input type="hidden" name = 'id' value="{{city.id}}"> <div class="layui-form-item"> <label class="layui-form-label">省份</label> <div class="layui-input-block"> <input type="text" name="province" required lay-verify="required" placeholder="請(qǐng)輸入省份" autocomplete="off" class="layui-input" value="{{city.provincename}}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">城市</label> <div class="layui-input-block"> <input type="text" name="city" required lay-verify="required" placeholder="請(qǐng)輸入城市名稱" autocomplete="off" class="layui-input" value="{{city.cityname}}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">人數(shù)</label> <div class="layui-input-block"> <input type="number" name="number" required lay-verify="required" placeholder="請(qǐng)輸入人數(shù)" autocomplete="off" class="layui-input" value="{{city.usernumber}}"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> </form> </div></div></body></html>
insert.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>增加</title></head><body><div class="layui-main"> <div class="site-content"> <br><br> <h1 class="site-h1">添加信息</h1><br><br> <form class="layui-form" action="insert" method="post"> <div class="layui-form-item"> <label class="layui-form-label">省份</label> <div class="layui-input-block"> <input type="text" name="province" required lay-verify="required" placeholder="請(qǐng)輸入省份" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">城市</label> <div class="layui-input-block"> <input type="text" name="city" required lay-verify="required" placeholder="請(qǐng)輸入城市" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">用戶數(shù)</label> <div class="layui-input-block"> <input type="number" name="number" required lay-verify="required" placeholder="請(qǐng)輸入用戶數(shù)量" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> </form> </div></div></body></html>
static
目錄下(static目錄用于存放靜態(tài)文件如css
,js
文件可以讓網(wǎng)站看起來(lái)更加美觀)。index.html:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>首頁(yè)</title> <link rel="stylesheet" href="/static/layui/css/layui.css"></head><body> <div align="center"> <br> <a href="insert_page">添加城市</a> <br> <br> <table id = 'tabledemo'lay-filter="test"> <thead> <tr> <th lay-data="{field:'id', width:100}">編號(hào)</th> <th lay-data="{field:'provincename', width:100}">省份</th> <th lay-data="{field:'cityname', width:80, sort:true}">城市名稱</th> <th lay-data="{field:'usernumber'}">用戶數(shù)量</th> <th lay-data="{fixed: 'right', width: 165, align:'center', toolbar: '#barDemo'}"></th> </tr> </thead> <tbody> {% for item in city_list %} <tr> <td>{{item.id}}</td> <td>{{item.provincename}}</td> <td>{{item.cityname}}</td> <td>{{item.usernumber}}</td> </tr> {% endfor %} </tbody> </table> </div><script type="text/html" id="barDemo"> <a class="layui-btn layui-btn-xs" lay-event="edit">編輯</a> <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">刪除</a></script><script src="/static/layui/layui.js"></script><script> layui.use('table', function () { var table = layui.table;//轉(zhuǎn)換靜態(tài)表格 table.init('test', { height: 1000, width: 600//設(shè)置高度 ,limit:100 }); table.on('tool(test)', function(obj){ //注:tool 是工具條事件名,test 是 table 原始容器的屬性 lay-filter="對(duì)應(yīng)的值" var data = obj.data //獲得當(dāng)前行數(shù)據(jù) ,layEvent = obj.event; //獲得 lay-event 對(duì)應(yīng)的值 if(layEvent === 'detail'){ layer.msg('查看操作'); } else if(layEvent === 'del'){ layer.confirm('真的刪除行么', function(index){ location.href='/delete?id='+data.id; }); } else if(layEvent === 'edit'){ location.href='/alter?id=' + data.id + "&provincename=" +data.provincename + "&cityname=" + data.cityname + "&usernumber=" + data.usernumber; } }); });</script></body></html>
alter.html:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>修改</title> <link rel="stylesheet" href="/static/layui/css/layui.css"></head><body><div class="layui-main"> <div class="site-content"> <br><br> <h1 class="site-h1">修改信息</h1> <br><br> <form class="layui-form" action="alter" method="post"> <input type="hidden" name = 'id' value="{{city.id}}"> <div class="layui-form-item"> <label class="layui-form-label">省份</label> <div class="layui-input-block"> <input type="text" name="province" required lay-verify="required" placeholder="請(qǐng)輸入省份" autocomplete="off" class="layui-input" value="{{city.provincename}}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">城市</label> <div class="layui-input-block"> <input type="text" name="city" required lay-verify="required" placeholder="請(qǐng)輸入城市名稱" autocomplete="off" class="layui-input" value="{{city.cityname}}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">人數(shù)</label> <div class="layui-input-block"> <input type="number" name="number" required lay-verify="required" placeholder="請(qǐng)輸入人數(shù)" autocomplete="off" class="layui-input" value="{{city.usernumber}}"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> </form> </div></div><script src="/static/layui/layui.js"></script><script> //Demo layui.use('form', function () { var form = layui.form; });</script></body></html>
insert.html:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>增加</title> <link rel="stylesheet" href="/static/layui/css/layui.css"></head><body><div class="layui-main"> <div class="site-content"> <br><br> <h1 class="site-h1">添加信息</h1><br><br> <form class="layui-form" action="insert" method="post"> <div class="layui-form-item"> <label class="layui-form-label">省份</label> <div class="layui-input-block"> <input type="text" name="province" required lay-verify="required" placeholder="請(qǐng)輸入省份" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">城市</label> <div class="layui-input-block"> <input type="text" name="city" required lay-verify="required" placeholder="請(qǐng)輸入城市" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">用戶數(shù)</label> <div class="layui-input-block"> <input type="number" name="number" required lay-verify="required" placeholder="請(qǐng)輸入用戶數(shù)量" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> </form> </div></div><script src="/static/layui/layui.js"></script><script> layui.use('form', function () { var form = layui.form; });</script></body></html>
nohup python app.py &
exit
命令退出 linux 的連接8848
端口。server {listen 80;autoindex on;server_name flask.codejiaonang.com;access_log /usr/local/nginx/logs/access.log combined;location / { proxy_pass http://127.0.0.1:8848/; }}
關(guān)鍵詞:入門
客戶&案例
營(yíng)銷資訊
關(guān)于我們
客戶&案例
營(yíng)銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。