首页
关于
留言板
友链
壁纸
Search
1
使用Git上传文件到GitHub
36 阅读
2
年纪轻轻,不学高数怎么行?
21 阅读
3
高等数学(同济版)电子书
20 阅读
4
Fiddler Everywhere的使用
20 阅读
5
Python多线程详解
19 阅读
Web前端
JavaScript
Python
Flask框架
爬虫项目
Selenium自动化
生活
其他
登录
Search
标签搜索
Python
python爬虫
Flask
技能
软件
生活
SEO
Git
Lollipop
累计撰写
35
篇文章
累计收到
7
条评论
首页
栏目
Web前端
JavaScript
Python
Flask框架
爬虫项目
Selenium自动化
生活
其他
页面
关于
留言板
友链
壁纸
搜索到
5
篇与
Flask框架
的结果
2022-11-27
Flask学习笔记(五)
模板的控制结构简介在模板中使用的控制结构,主要有 if 、 for 。下面会详细讲解使用方法。if控制结构的使用if 的使用语法规则:# 模板中的if控制结构 {% if 条件 %} 符合条件执行的html代码 {% endif %} # 必须要有,作为结束当然在模板中也是支持 if---else 结构的。使用也是一样# {% if 条件 %} # 中间写为True执行的代码 # {% else %} # 中间写为False执行的代码 # {% endif %}其实,在模板中使用控制结构就同在python中是基本相同的,不过是加了 {% %} 框起来了而已, 这是jinja2中设置好的规则。{% %}是Jinja2中的控制语句,{{ }}是Jinja2中的变量,{# #}是注释。案例理解:flask程序中:from flask import Flask, render_template app = Flask(__name__) #@app.route('/page') #def index(name): # 定义一个变量在模板中使用 # uname = '披甲龙龟' # return render_template('Process-control-if.html', test_data=locals()) @app.route('/page/<name>') def page_name(name): # uname = '披甲龙龟' str_name = name return render_template('Process-control-if.html', test_data=locals()) @app.route('/info') def info(): return '<img src="https://p1.ssl.qhimg.com/t014ee57f018c046471.jpg">' if __name__ == '__main__': app.run(debug=True)模板文件中:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .test1 { color: #f60; text-aline:center; } </style> <body> {% if test_data.uname %} <h1 class="test1">Hello ~ {{test_data.uname}}</h1> {% endif %} <!-- 在这里意思是如果uname存在,会执行Hello ~ uname的值,否则什么都不执行 对应index视图--> {% if test_data.uname %} <h1 class="test1">Hello ~ {{test_data.uname}}</h1> {% else %} <h1 class="test1">Hello World ~ {{test_data.name}}🤭 {% endif %} <!-- 同上面相同,如果不存在时会执行Hello World ~ <name>地址栏输入的值 对应page_name视图--> <!--这里讲url_for在模板中反向解析的用法--> {% if test_data.uname %} <h2><a href="{{url_for('info')}}">关于我</a></h2> {% endif %} </body> </html>这里就不运行给大家看了。for控制结构的使用for的使用语法规则:# 模板中的for控制结构 {% for 变量 in 可迭代对象(list/tuple/dict/set/str...) %} # 中间写循环体(html代码或动态变量) {% endfor %} # 作为结束,必须有for语句在模板中的使用很广泛,遍历,循环,通常需要传递多个变量时,会在视图函数中封装成字典、列表、元组等类型数据,这样我们只需要传递一个可迭代的变量再通过模板的for控制结构遍历出数据就实现多个数据的传递。案例理解:flask程序中:from random import choice from flask import Flask, render_template app = Flask(__name__) @app.route('/page') def index(): uname = '披甲龙龟' # 随机 abcd lis = ['A', 'B', 'C', 'D'] random_word = [choice(lis) for _ in range(10)] # 用模板的for来遍历该字典 dicts_data = { '疾风剑豪': '亚索', '暗裔剑魔': '亚托克斯', '无双剑姬': '菲奥娜', '无极剑圣': '易', } return render_template('Process-control-for.html', test_data=locals()) if __name__ == '__main__': app.run(debug=True) 模板文件中:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% if True%} <h1 class="test1">Hello ~ {{test_data.uname}}</h1> {% endif %} <!--模板中使用 for 循环结构--> <!--list--> <ul> {% for li in test_data.random_word %} <li><h2>{{li}}</h2></li> {% endfor %} </ul> <!--dict--> <div> {% for k,v in test_data.dicts_data.items() %} <p>{{k}}:{{v}}</p> {% endfor %} </div> </body> </html>运行结果:
2022年11月27日
5 阅读
0 评论
0 点赞
2022-11-13
Flask学习笔记(四)
模板的变量简介模板中的变量是一种特殊的占位符,是用来告诉模板引擎,该位置的值是从渲染模板时传递的数据中来获取的。通过render_template('xxx.html', 变量名1=变量值1,变量名2=变量值2 ...)来传递变量的值。变量在模板中的表示在模板中占位变量的表示 : {{变量名}} 在 flask 程序中:from flask import Flask, render_template app = Flask(__name__) @app.route('/first') def index(): return render_template('FirstTemplate.html', title='My First Template', ) if __name__ == '__main__': app.run(debug=True)在html文件(模板文件)中:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{title}}</title> </head> <body> <h1>This is {{title}}</h1> </body> </html>运行试试吧,😀如果没问题你会看到复杂类型的变量传参这只是简单字符串类型的传递,如果需要列表,字典等又该怎么操作呢?如果需要传入的变量有很多,都写在 render_template 里会不会显得代码不美观且臃肿?为避免将所有占位变量都写在 render_template 中,通常在视图函数中定义好要动态传递的变量,再通过 locals() 方法,它会以字典的方式创建一个变量,局部变量名为 key 值为value的形式存储。示例:flask程序:from flask import Flask, render_template app = Flask(__name__) @app.route('/first') def index(): title = 'Hello World' content = '我是内容我是内容我是内容。。。' return render_template('FirstTemplate.html', info=locals()) if __name__ == '__main__': app.run(debug=True)模板文件:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{info.title}}</title> </head> <body> <h1>This is content:{{info.content}}</h1> </body> </html>在模板中通过 {{info.占位变量}} 来引用变量,是不是简单多了,再多的变量,都可以以这种方式来获取。或者是直接 **locals() 来把变量封装,在模板中就直接使用 {{占位变量}} 也是一样的实现效果执行结果:复杂数据类型flask程序:class LOLHero(object): def __init__(self): self.name = None def say(self): return '这是{self.name}的信息...' @app.route('/index') def index(): # 字符串类型 title = '不同数据类型的模板传参' # 列表类型 lists_data = ['提莫', '璐璐', '小法师', '小炮手', '波比'] # 元组类型 tuples_data = ('疾风剑豪', '暗裔剑魔', '无双剑姬', '无极剑圣') # 字典类型 dicts_data = { '疾风剑豪': '亚索', '暗裔剑魔': '亚托克斯', '无双剑姬': '菲奥娜', '无极剑圣': '易', } # 类方法 (对象) hero = LOLHero() hero.name = '无敌盖伦' return render_template('differentDataTemplate.html', test_data=locals())模板文件:<!--获取列表中的第1个元素--> <h2>list中第1个元素:{{test_data.lists_data.0}}</h2> <h2>list中第1个元素:{{test_data.lists_data[0]}}</h2> <!--两种方式都可以--> <!--获取元组中的第3个元素--> <h2>tuple中第3个元素:{{test_data.tuples_data[2]}}</h2> <!--获取字典中键为 '无极剑圣' 的值--> <h2>dict中键为 '无极剑圣' 的值:{{test_data.dicts_data['无极剑圣']}}</h2> <!--获取类对象LOLHero中的 name 属性值--> <h2>LOLHero的name属性: {{test_data.hero.name}}</h2> <!--调用类对象LOLHero的 say 方法--> <h2>LOLHero的 say 方法: {{test_data.hero.say()}}</h2>执行结果:url_for()在模板中的使用flask程序:from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('yyy.html') @app.route('/login') def login(): return '这是登录页面...👋' if __name__ == '__main__': app.run(debug=True)模板文件:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2><a href="{{url_for('login')}}">点击登录</a></h2> </body> </html>运行就可以看见当我们鼠标移动到 点击登录 上时,会在页面左下角显示反向解析的路径,也可以打开开发者工具查看 是 /login 的格式。
2022年11月13日
7 阅读
0 评论
0 点赞
2022-11-01
Flask学习笔记(三)
Flaks的模板简介在前面的实例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。视图函数有两个作用:处理业务逻辑返回响应内容在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。不可能像前面那样把视图处理函数的返回直接写在里面吧。那样太麻烦,也太丑了,不知道的因为你在写前端呢 😂模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取Flask模板用模板创建动态的网页,包含响应文本的文件(html)该文件中允许包含 “占位变量” ,用动态的方式来传递数据,“占位变量”最终会被真实的值所替换。模板最终也会被解析成响应的字符串, 这一过程即为"渲染"Flask 是使用 Jinja2 这个模板引擎来渲染模板模板的使用1.创建模板文件夹默认情况下, Flask会在项目文件夹中的 templates 文件夹中寻找模板所以需要手动在项目目录下创建 templates 文件夹就像这样:2.模板的渲染Flask提供的render_template函数封装了该模板引擎render_template函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值在视图函数中,通过 return render_template() 将模板渲染成字符串再响应给客户端 render_template(): 语法 render_template('index.html', arg1=value1, arg2=value2) 第一个参数: xxx.html 要渲染给客户端的html模板 参数1 - 参数n : 要传递给模板动态显示的变量占位符,如果没有动态的变量占位符, 则可以省略 有点像format() 🙃 hhh 返回值 是字符串程序代码from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') # 模板文件一定是在templates文件夹下 if __name__ == '__main__': app.run(debug=True)执行结果
2022年11月01日
6 阅读
0 评论
0 点赞
2022-10-29
Flask学习笔记(二)
Flask的路由简介认识Flask的项目结构 :----static --------css --------js --------images ... ----templates --------index.html --------page.html --------category.html ... ----app.pystatic文件夹里存放的都是些静态文件如:css,js,图片,视频,音频等。templates就是存放些html文件咯。app.py可以看作处理路由以及配置的文件。配置上:app = Flask( __name__, template_folder='xxx', static_folder='xxx', static_url_path='/xxx' )1.template_folder : 指定存放模板的文件夹的名称(默认为templates)2.static_folder : 指定存放静态文件资源的文件夹的名称(默认为static)注意:如果没有指定static_url_path的话,则访问路径和static_folder 的名称是一致的3.static_url_path : 指定静态文件的访问路径我们入门学习的话就先让它保持默认就好路由是什么客户端(例如 Web 浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask 程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。在Flask中,路由是通过 @app.route 装饰器来表示的路由的使用一个参数的路由from flask import Flask app = Flask(__name__) # 1.基本带参路由 # <name> 后续要在地址栏传递的参数,(一个参数的路由) @app.route('/show/<name>') def show1(name): # 函数中,name表示的就是手动在地址栏上传递过来的数据 (接收) return "<h1>Hello ~ {}</h1>".format(name) if __name__ == '__main__': app.run(debug=True)运行结果:多个参数的路由from flask import Flask app = Flask(__name__) # 2.带多个参数的路由 连个参数的路由 # 在<>中的参数必须跟传递的相同 @app.route('/manyShow/<title>/<page>') def many_show(title, page): return "<h1>这是关于{}的内容,第{}页</h1>".format(title, page) if __name__ == '__main__': app.run(debug=True)运行结果:指定路由参数的类型from flask import Flask app = Flask(__name__) # 3.指定参数类型的路由 <int: page>: 表示page参数是一个整形的数值而非默认的字符 @app.route('/article/<title>/<float:page>') def many_show(title, page): return "<h1>你用的{}的版本号是{}</h1>".format(title, page) # *以占位符的方式来接收参数,如果什么都不做只能是字符串类型 # page 此时为float类型,而并非字符串 # Flask 中所支持的类型转换器 # 缺省(默认不写的) 字符串型, 不允许有 / # int: 整形 # float: 浮点型 # path: 字符串型, 但允许有 / if __name__ == '__main__': app.run(debug=True)运行结果:多路由的使用from flask import Flask app = Flask(__name__) # 允许在一个视图处理函数中设置多个url路由规则 @app.route('/') @app.route('/index') def index(): # 就是 / 和 /index路径都展示同一页面 --> 首页 return '<h1>这是首页</h1>' if __name__ == '__main__': app.run(debug=True)路由中设置HTTP请求方法Flask路由设置规则也允许设置对应的请求方法,只有将匹配上请求方法的路径交给视图处理函数取执行通过methods=['请求类型'] 来设置,最常用POST和GET@app.route('/post', methods=['POST']) def post(): return 'xxx' # * 只有post请求方式允许访问 localhost:5000/post运行结果:可以在浏览器开发工具中的network中看到,Request Method 为 GET -- 405 ,是因为页面默认是GET请求,而POST请求是由表单产生的解决:@app.route('/post', methods=['POST', 'GET']) def post(): return '假装是POST请求'后面学习到会更详细,这里简单看看就好url的解析正向解析:程序自动解析,根据@app.route()中设置的访问路径来匹配处理函数反向解析:通过视图处理函数的名称自动生成视图处理函数的访问路径Flask中提供了 url_for() 函数,用于反向解析urlfrom flask import Flask, url_for app = Flask(__name__) @app.route('/language/<name>/<version>') def url(name, version): return '<h1>您当前使用的编程语言是{},版本是{}.</h1>'.format(name, version) @app.route('/url') def page_url(): # 链接地址 /python 像爬虫中经常需要拼接的链接部分 这即是反向解析的url地址 link = url_for('url', name='python', age='3.8') resp = '<a href="'+link+'">反向解析后的地址:' + link+' </a>' return resp if __name__ == '__main__': app.run(debug=True)运行结果:特殊: url_for('static', filename='style.css')filename 静态文件反向解析
2022年10月29日
11 阅读
0 评论
0 点赞
2022-10-29
Flask学习笔记(一)
开始Flask的学习简介在开始学习之前先推荐几个我在学习过程中觉得不错的Flask入门网址。我还想说,在学习过程中不断扫盲,就像在玩冒险游戏,一关又一关,乐此不疲,通过难关你是否会有愉悦的感受呢?推荐闲时观看的网址第一个当然是官网啦,官方出品质量肯定没得说 {abtn icon="" color="#ff6800" href="https://dormousehole.readthedocs.io/en/latest/index.html" radius="" content="点击去看"/}{dotted startColor="#ffc758" endColor="#dc262b"/}GitHub上的一个开源项目,从0到一个电影表单页面的制作,还是非常不错滴。 {abtn icon="" color="#ff6800" href="https://helloflask.com/book/3/" radius="" content="点击去看"/}{dotted startColor="#ffc758" endColor="#dc262b"/}W3CSchool 很典的编程资源网站了,学就完了。 {abtn icon="" color="#ff6800" href="https://www.w3cschool.cn/flask/" radius="" content="点击去看"/}{dotted startColor="#ffc758" endColor="#dc262b"/}关于FlaskFlask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。Flask框架模式Flask 的框架模式 - MTV经典三层结构 :MVC模式 M :Models ,模型层,负责数据库建模 V :Views,视图层,用于处理用户显示的内容,如 :html C :Controller,控制器,处理与用户交互的部分内容。处理用户的请求并给出响应python常用:MTV模式 M :Models ,模型层,负责数据库建模 T :Templates ,模板层,用于处理用户显示的内容,如:html V :Views ,视图层,处理与用户交互的部分内容。处理用户的请求并给出响应我们接下来学习也是学习 MTV 模式安装flaskpip install flask建议大家使用虚拟环境#虚拟环境我使用的是 virtualenv 是一个第三方库 #安装很简单 --> pip install virtualenv 如果知道更多关于虚拟环境的内容可以自行google、bing、百度一下哦好啦,准备工作完成,接下来,直接上最简单案例,跑一下就了解咯。初试Flask程序# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/9/15-23:22 # @File:0-app.py from flask import Flask # 将当前运行的主程序构建成flask的应用(实例化) app = Flask(__name__) # route Flask中的路由定义,定义用户的访问路径 “/” 在浏览器中表示根目录 @app.route('/') def hello_world(): return '<h1>Hello, World!</h1>' # 视图处理函数,该函数必须要有return 可以返回字符串或响应对象 if __name__ == '__main__': # app.run(debug=True, port=8080) # 运行flask应用(启动Flask的服务) # debug=True 是将当前的启动模式改为调试模式 (开发环境中推荐使用调试模式,生产环境中不允许使用) app.run(debug=True) # http://localhost:8080 与 http://127.0.0.1:8080是一样的 不写port默认的端口为5000
2022年10月29日
10 阅读
0 评论
0 点赞