|
FlASK是一个轻量级的WSGIWeb应用程序框架,Flask的核心包括Werkzeug工具箱和Jinja2模板引擎,它没有默认使用的数据库或窗体验证工具,这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单,同时提供强大的扩展性,用户可以通过添加各种扩展来增加功能,如邮件发送、用户认证、数据库集成等 然后需要嘱咐的一个事情,一定要注意代码格式,Tab制表符和空格一定要区分开 pip升级命令:python-mpipinstall--upgradepipFlASK框架安装:1.软件版本Flask要求Python的版本在3.4以上2.创建一个工作目录my_python_flask(使用makdir命令)3.创建虚拟环境python-mvenvmyenv4.安装flask框架pipinstallflask其他包:pipinstallflask-loginpipinstallflask-openidpipinstallflask-mail:为Flask应用程序提供SMTP接口pipinstallflask-sqlalchemy:将SQLAlchemy支持添加到Flask应用程序中pip installflask-mysqldb: 支持数据库操作pipinstallmysql-connector-pythonpipinstallflask-whooshalchemypipinstallflask-wtf:添加了WTForms的渲染和验证pipinstallflask-babelpipinstallguess_languagepipinstallflipfloppipinstallSijax:使AJAX易于在Web应用程序中使用Python/jQuery库 5.运行.bat文件 6.检查安装是否成功pipfreeze相关依赖解释:依赖名称依赖作用Werkzeug用于实现WGGI,应用和服务之间的标准Python接口Jinja用于渲染页面的模板语言MarkupSafe与Jinja共用在渲染页面时用于避免不可信的输入,防止注入攻击ItsDangerous保证数据完整性的安全标志数据,用于保护Flask的sessioncookieClick一个命令行应用的框架,用于提供flask命令,并允许添加自定义管理命令FlASK框架使用:1.代码:fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world(): return'Hello,World!'2.FLASK_APP环境变量setFLASK_APP=flaskone/main/index.py3.启动命令python-mflaskrun4.运行结果:调试模式:命令:setFLASK_ENV=developmentflaskrun--host=0.0.0.0路由参数以及路由参数强制转换@app.route('/user/')转换器类型使用string字符串类型int整数类型float小数类型path路径类型代码:fromflaskimportFlaskapp=Flask(__name__)@app.route('/hello_world/')defhello_world(age): return"获取的年龄是:%s"%age运行结果:FlaskURL构建+重定向代码:fromflaskimportFlask,redirect,url_forapp=Flask(__name__)@app.route('/admin')defhello_admin(): return'HelloAdmin'@app.route('/guest/')defhello_guest(guest): return'Hello%sasGuest'%guest@app.route('/user/')defuser(name): ifname=='admin': returnredirect(url_for('hello_admin')) else: returnredirect(url_for('hello_guest',guest=name))if__name__=='__main__': app.run(debug=True)输出结果:浏览器访问地址:http://127.0.0.1:5000/user/admin浏览器输出地址:http://127.0.0.1:5000/admin浏览器访问地址:http://127.0.0.1:5000/user/home浏览器输出地址:http://127.0.0.1:5000/guest/home结合代码看,发现了问题所在没有? 1.重定向的标准函数是:redirect 2.定义的函数user,这个函数很说明问题,以后的代码延伸就是靠这个url_for方法来实现的,至于到底有什么用,相信有经验的开发者已经看出了,这个方法可以作为一个中间件使用,这点非常重要,一定要重视HTTP请求 在PHP、Golang、Python等等语言中,常用请求的方式无非有以下几种,这个可以结合前面的url_for来实现Restful风格接口编号方法描述1GET将数据以未加密的形式发送到服务器,这最常用的方法。2HEAD与GET相同,但没有响应主体3POST用于将HTML表单数据发送到服务器。通过POST方法接收的数据不会被服务器缓存。4PUT用上传的内容替换目标资源的所有当前表示。5DELETE删除由URL给出的所有目标资源的所有表示使用方法,定义路由的时候可以定义HTTP请求方法fromflaskimportFlask,redirect,url_forapp=Flask(__name__)@app.route('/test',methods=['GET','POST','HEAD','PUT','DELETE'])deftest(): return'echotest'数据接收:3.0及以上版本使用data=request.form.to_dict()name=data.get('name')age=data.get('age')3.0以下版本使用age=request.agrs.get("age","21")fromflaskimportFlask,requestapp=Flask(__name__)@app.route("/agrs",methods=['POST'])defagrs():data=request.form.to_dict()sex=data.get("sex")name=data.get("name")returnf"姓名:{name}性别:{sex}"if__name__=='__main__':app.run()Flask模板(模板引擎) Jinja2通过render_template()函数渲染HTML文件,Web模板包含用于变量和表达式(这些情况下为Python表达式)的HTML语法散布占位符,这些变量和表达式在模板呈现时被替换为值,模板引擎使用以下分隔符来从HTML转义{%...%}用于多行语句{{...}}用于将表达式打印输出到模板{#...#}用于未包含在模板输出中的注释#...##用于单行语句注意:路径示例(.py文件夹和templates一定要在同一级)fromflaskimportFlask,render_templateapp=Flask(__name__)@app.route('/test')deftest(): dic={"firts":1,"second":2,"thired":3} returnrender_template('test.html',result=dic)if__name__=='__main__': app.run(debug=True) {%forkey,valueinresult.items()%} keys:{{key}} values:{{value}} {%endfor%}访问地址:127.0.0.1:5000/test会话处理: 所谓的会话,就是客户端浏览器和服务端网站之间一次完整的交互过程。会话的开始是在用户通过浏览器第一次访问服务端网站开始。会话的结束时在用户通过关闭浏览器以后,与服务端断开。所谓的会话控制,就是在客户端浏览器和服务端网站之间,进行多次http请求响应之间,记录、跟踪和识别用户的信息而已。 在客户端存储信息使用Cookie,token[jwt,oauth] 在服务器端存储信息使用SessionCOOKIE语法:response.set_cookie("变量名","变量值",max_age="有效期几秒")fromflaskimportFlask,make_response,requestapp=Flask(__name__)@app.route('/set_cookie')defset_cookie(): response=make_response('set_cookie') response.set_cookie('name','pure') response.set_cookie('age','18',max_age=3600) returnresponse @app.route('/get_cookie')defget_cookie(): name=request.cookies.get('name') age=request.cookies.get('age') return"name={name}&age={age}" @app.route("/del_cookie")defdel_cookie(): response=make_response("delcookie") response.set_cookie("name","",expires=0) returnresponse if__name__=='__main__': app.run(debug=True)SESSION SESSION使用session之前,必须先设置秘钥fromflaskimportFlask,sessionapp=Flask(__name__) classConfig(object): SECRET_KEY="12345678987654321" app.config.from_object(Config) @app.route('/set_session')defset_session(): session["name"]="pure" session["age"]=18 session["book_list"]=[{"title":"book_name"},{"title":"book_name"}] return"set_session" @app.route('/get_session')defget_session(): name=session.get("name") age=session.get("age") book_list=session.get("book_list") return"name={name}&age={age}&book_list={book_list}"@app.route('/del_session')defdel_session(): ifsession.get("name"): delsession["name"] return"ok"if__name__=='__main__': app.run(debug=True)数据库相关包:pipinstallpymysqlpipinstallmysql-connector-python 数据库连接: fromflaskimportFlaskimportmysql.connectorapp=Flask(__name__)mydb=mysql.connector.connect(host="localhost",user="root",passwd="root",database="test")mycursor=mydb.cursor()mycursor.execute("SELECT*FROMuser")myresult=mycursor.fetchall()#fetchall()获取所有记录forxinmyresult:print(x)if__name__=='__main__':app.run()输出结果:使用SQLAlchemy链接数据库fromflaskimportFlaskfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)#数据库链接地址app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:root@127.0.0.1:3306/test'#动态追踪修改设置,如未设置只会提示警告app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Truedb=SQLAlchemy(app)classUser(db.Model):id=db.Column('id',db.Integer,primary_key=True)username=db.Column(db.String(100))sex=db.Column(db.String(100))age=db.Column(db.Integer)def__init__(self,username,sex,age):self.username=usernameself.sex=sexself.age=age@app.route("/query",methods=['POST','get'])defquery():data=User.query.all()forxindata:print(x)if__name__=='__main__':app.run()输出结果: 讲到这里,入门课程就已经讲完了,剩下的部分需要自己实操去解决问题了,以后小编会继续撰写相关文章
|
|