找回密码
 会员注册
查看: 49|回复: 0

Python-Flask框架

[复制链接]

1

主题

0

回帖

4

积分

新手上路

积分
4
发表于 2024-9-4 15:28:11 | 显示全部楼层 |阅读模式
Flask是一个使用Python编写的轻量级 Web应用框架。其WSGI工具箱采用Werkzeug,模版引擎则使用Jinja2。Flask使用BSD授权。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。flask中文文档:Flask中文网flask官网:WelcometoFlask—FlaskDocumentation(3.0.x)        目录一、创建一个Flask项目在项目文件中创建基本文件在终端中下载flask模块在app.py中编写基本flask架构启动flask项目 二、定义网页链接基本代码在根路由下显示HelloWord!文字界面在/profile路径下显示“我是个人中心”  在url上传blog_id后显示在网页上 三、渲染静态文件 四、将数据传输给html第一种:指定数据传到指定html第二种:将数据从url中传给html 五、过滤器 六、控制代码块七、Web表单  八、flash消息闪现九、文件上传十、Cookies相关操作十一、重定向和错误十二、响应 十三、Python中的中文字符编码问题一、创建一个Flask项目在项目文件中创建基本文件基本文件文件名文件类型说明static文件夹用于存储静态文件templates文件夹用于存放html文件app.pypython文件用于编写flask框架在终端中下载flask模块pipinstallflask在app.py中编写基本flask架构详细说明:引入flask模块 fromflaskimportFlask使用Flask创建一个对象为app(可以不为app,默认是app) 其中“__name__”代表当前app.py这个模块app=Flask(__name__)创建一个根路由@对象名.route('路由地址')定义一个对象,返回页面中显示的数据注意:一个路由只能有一个方法@app.route('/')defhello_word():  return'HelloWorld3232323!'执行文件debug:是否自动更新(监听)host:设置host地址port:设置端口号if__name__=='__main__':  app.run(debug=True,host='0.0.0.0',port=8080)启动flask项目 在项目根目录下运行python-mflaskrun二、定义网页链接基本代码说明 在根路由下显示HelloWord!文字界面@app.route('/')defhello_word():  return'HelloWorld!'在/profile路径下显示“我是个人中心” #定义URL@app.route('/profile')defprofile():  return'我是个人中心' 在url上传blog_id后显示在网页上@app.route('/blog/')defblog_detail(blog_id):  returnf'您访问的博客是:{blog_id}'例如我的url为 http://127.0.0.1:5000/blog/1234在网页上就会显示后面的1234,将url上的值传到了网页上用get方法传值传到页面上@app.route('/book/list')defbook_list():  page=request.args.get("page",default=1,type=int)  returnf"您的获取的是第{page}的图书列表"这里使用了flask模块下的request模块,发送的是一个page的值,默认为1,类型为int型第一个参数值的名称第二个参数:default默认值第三个参数:type值的类型 总结:这些一个个不同的路由地址构建成了一个庞大的网页链接 三、渲染静态文件创建一个名为 static 的文件夹就行了。静态文件位于应用的 /static 中url_for('static',filename='style.css') 四、将数据传输给html第一种:指定数据传到指定html使用flask模块下的render_template模块给指定网页传输数据定义一个User类包含名称和邮箱地址@app.route('/')defhello_word():  user=User(username="知网",email="xx@qq.com")  person={    'username':'张三',    'email':'qisjidq张三@qq.com'  }  returnrender_template("index.html",user=user,person=person)定义一个字典persn,在render_template中赋值,将数据传输给前端在前端使用{{数据名称}}获取:第二种:将数据从url中传给html在该路由的方法中传值,然后渲染到指定网页上格式:@app.route('/blog/')defblog_detail(blog_id):  #给前端传blog_id数据 returnrender_template("blog_detail.html",blog_id=blog_id,username="知网")转换器类型string接受任何不包含斜杠的文本int接受正整数float接受正浮点数path类似 string ,但可以包含斜杠uuid接受UUID字符串注意:这里的HTML模版都应放在templates文件夹下 五、过滤器向前端传输数据@app.route('/filtter')#过滤器deffiltter_demo():user=User(username="知网xxxx",email="xx@qq.com")mytime=datetime.now()//向前端返回filtter.html页面,并传user,mytime值returnrender_template('filtter.html',user=user,mytime=mytime) 在html中使用过滤器//{{user.username|length}}渲染返回user.username长度{{user.username}}---{{user.username|length}}{{mytime|dformat}}flask常见的内置过滤器过滤器名称作用对象描述safe字符串禁用转义capitalize字符串把变量值的首字母转写成大写,其余字母转小写lower字符串把值转成小写upper字符串把值转成大写title字符串把值中的每个单词的首字母都转成大写reverse字符串字符串反转format字符串格式化输出striptags字符串渲染之前把值中所有的HTML标签都删掉truncate字符串字符串截断first列表取第一个元素last列表取最后一个元素length列表获取列表长度sum列表列表求和sort列表列表排序 六、控制代码块if判断{%ifage>18%}您已经满18岁,可以进入网吧{%elifage==18%}您刚满18岁,需要父母陪同才能进入网吧{%else%}您未满18岁不能进入网吧{%endif%}for循环 {%forbookinbooks%}图书名称:{{book.name}}图书作者:{{book.author}}{%endfor%}七、Web表单 使用Flask-WTF扩展处理Web表单WTForms支持的HTML标准字段字段对象说明StringField文本字段TextAreaField多行文本字段PasswordField密码文本字段HiddenField隐藏文件字段DateField文本字段,值为datetime.date文本格式DateTimeField文本字段,值为datetime.datetime文本格式IntegerField文本字段,值为整数DecimalField文本字段,值为decimal.DecimalFloatField文本字段,值为浮点数BooleanField复选框,值为True和FalseRadioField一组单选框SelectField下拉列表SelectMutipleField下拉列表,可选择多值FileField文件上传字段SubmitField表单提交按钮FormField把表单作为字段嵌入另一个表单FieldList一组指定类型的字段WTForms常用验证函数验证函数说明DataRequired确保字段中有数据EqualTo比较两个字段的值,常用于比较两次密码输入Length验证输入的字符串长度NumberRange验证输入的值在数字范围内URL验证URLAnyOf验证输入值在可选列表中NoneOf验证输入值不在可选列表中注意:使用Flask-WTF需要配置参数SECRET_KEY,CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密钥生成加密令牌常规实现from表单HTML模版 用户名: 密码: 确认密码: Python #methods=['GET','POST']判断请求的方式@app.route('/',methods=['GET','POST'])defIndex():#如果是POST请求就返回successifrequest.method=='POST':#获取请求的参数username=request.form.get('username')password=request.form.get('password')password2=request.form.get('password2')#判断参数是否完整;ifnotall([username,password,password2]):print('参数不完整')elifpassword!=password2:print('两次密码不一致')else:return'success'returnrender_template("static.html")获取get请求参数操作URL(URL?key=value)中提交的参数可以使用args属性searchword=request.args.get('key','') 八、flash消息闪现常用于from表单验证fromflaskimportFlask,render_template,request,flashfromdatetimeimportdatetimeapp=Flask(__name__)app.secret_key='WDEP'#设置加密的key@app.route('/',methods=['GET','POST'])defIndex():ifrequest.method=='POST':username=request.form.get('username')password=request.form.get('password')password2=request.form.get('password2')ifnotall([username,password,password2]):#设置返回闪存消息flash(u'参数不完整')#使用flash消息闪现必须给app设置加密keyelifpassword!=password2:flash(u'两次密码不一致')#在字符串里面添加u,表示字符串是unicode编码else:return'success'returnrender_template("static.html")if__name__=='__main__':app.run(debug=True)用户名: 密码: 确认密码: #获取并显示闪存消息{%formessageinget_flashed_messages()%}{{message}}{%endfor%}九、文件上传十、Cookies相关操作读取Cookiesfromflaskimportrequest@app.route('/')defindex():username=request.cookies.get('username')存储Cookiesfromflaskimportmake_response@app.route('/')defindex():resp=make_response(render_template(...))resp.set_cookie('username','theusername')returnresp注意: cookies设置在响应对象上。通常只是从视图函数返回字符串,Flask会把它们转换为响应对象。如果你想显式地转换,那么可以使用make_response()函数,然后再修改它十一、重定向和错误使用redirect()函数可以重定向。使用abort()可以更早退出请求fromflaskimportabort,redirect,url_for@app.route('/')defindex():returnredirect(url_for('login'))@app.route('/login')deflogin():abort(401)this_is_never_executed()十二、响应  使用errorhandler()定制出错页面fromflaskimportrender_template@app.errorhandler(404)defpage_not_found(error):returnrender_template('page_not_found.html'),404注意: render_template()后面的404,这表示页面的状态码是404使用make_response()包裹返回表达式@app.errorhandler(404)defnot_found(error):resp=make_response(render_template('error.html'),404)resp.headers['X-Something']='Avalue'returnresp使用JSON格式的API@app.route("/me")defme_api():user=get_current_user()#返回一个dict,那么它会被转换为一个JSON响应return{"username":user.username,"theme":user.theme,"image":url_for("user_image",filename=user.image),}#或使用jsonify()函数@app.route("/users")defusers_api():users=get_all_users()returnjsonify([user.to_json()foruserinusers])十三、中文字符编码问题#单个解决(在字符前面+u)flash(u'解决问题')##全局一次性解决编码问题importsysreload(sys)sys.setdefaultencoding('utf8')十四、Flask使用SQL数据库使用flask-sqlalchemy操作数据库pipinstallflask-sqlalchemy如果使用Mysql则需要安装mysqldbpipinstallflask-mysqldb
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-12 20:43 , Processed in 0.870605 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表