🌵Flask系列文章
🌴欢迎点赞评论学习交流~
🌱各位看官多多关注哦😘~
🍀开整!!!
目录
众所周知,Flask框架是python的一个轻量级微型框架,使用它来开发是非常的方便的。所以,最近花了一点时间研究了一下,基础入门的内容还是挺容易的,我会继续学习关于Flask的应用,接下来的我把关于学习Flask的笔记分享给大家,希望大家多点赞的➕关注的➕评论~
基本内容是以下几个方面,接下来我会一一介绍。
web开发基础
Flask中的Hello World
Flask中的模板
Flask的消息提示与异常处理
我们知道web开发涉及了前端和后端,前端方面我们要了解以下几种技术。
了解HTML的基本使用,能够使用css样式像浮动之类的,熟悉javascipt的基本语法。
前端常用的库与框架
Bootstrap
jQuery
ANGULARJS
React
这些框架可以自行去了解~
MVC设计模式
View(视图)
Controller(控制器)
Model(模板)
Flask的设计模式为MVC模式,视图负责前端展示;控制器负责转发请求,对请求进行处理;模板负责数据相关逻辑,编写程序应有的功能,数据库的连接等等。
Flask应用的基本构成
Flask的路由
Flask的反向路由
from flask import Flask
#给Flask一个实例化对象,其中__name__入参是你的模块名或者包名,Flask应用会根据这个来确定你的应用路径以及静态文件和模板文件夹的路径
app = Flask(__name__)
#路由
@app.route('/')
def hello_world():
return 'Hello World!'
#运行
if __name__ == '__main__':
app.run()
运行打开网页你就可以看到Hello World!
from flask import Flask
app = Flask(__name__)
@app.route('/user',methods=['POST'])
def hello_user():
return 'hello user'
这里我们可以用到一个工具来调试: PostWoman Http接口调试工具
在路由中传递参数
在request实例对象中获取参数
在路由中传递参数
from flask import Flask
app = Flask(__name__)
@app.route('/users/<id>')
def users_id(id):
return 'users id:' + id
#访问127.0.0.1/users/12334
#id为12334
在路由中传参我们访问的时候的是“/参数"
在request实例对象中获取参数
from flask import Flask,request
app = Flask(__name__)
@app.route('/query_id')
def query_id():
id = request.arg.get('id')
return 'query id:' + id
#访问127.0.0.1/query_id?id=12334
request实例对象传参访问的时候是”?参数=xxxx“
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/query_url')
def query_url():
return 'query url:' + url_for('users_id')
反向路由用的是url_for('返回的函数')
了解完路由的基本使用后,我们说说Flask的模板~
基本内容
模板的简单使用
条件语句
循环语句
模板的继承
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
创建一个文件夹用来存放index.html静态模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>template</title>
</head>
<body>
<h1>hello world!</h1>
</body>
</html>
这里我们可以看到和hello world!和之前在学简单的Hello world!效果一样,不过这里我们用的是一个html文件来展示的。
使用模板语法
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
content = 'hello,world!'
return render_template('index.html',content=content)
静态文件index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>template</title>
</head>
<body>
<h1>{{content}}</h1>
</body>
</html>
这里看到的也是hello world!只不过我们将静态文件的内容藏起来了,通过后端返回的内容再显示出来,用的是模板语法,两种方法在前端显示的都一样。但是更加复杂的如何展示呢?我们写一些简单的逻辑语句。
将需要传递的参数写入models.py
class User:
def __init__(self,user_id,user_name):
self.user_id = user_id
self.user_name = user_name
编写后端flaskapp.py
from flask import Flask,render_template
from models import User
app = Flask(__name__)
#引用模板
@app.route('/')
def hello_world():
content = 'hello world!'
return render_template('index.html',content=content)
#引用自己写的models.py中的类
@app.route('/user')
def user_index():
user = User(1,'李明')
return render_template('user_index.html',user=user)
if __name__ == '__main__':
app.run()
这里我们写了一个函数用来调用models.py中的类,再将它传给前端展示。
编写user_index.html静态文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>user</title>
</head>
<body>
<h1>hello {{user.user_name}}</h1>
</body>
</html>
user_index.html静态文件文件中我们使用模板语法来获取实例对象。
如何在模板中使用条件语句呢?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>条件语句</title>
</head>
<body>
{% if user.user_id == 1 %}
<h1> Hello {{user.name}}</h1>
{% else %}
<h1>This no user!</h1>
{% endif %}
</body>
</html>
创建info.html静态文件,使用用模板语法if......elseif......
from flask import Flask,render_template
from models import User
app = Flask(__name__)
#路由
@app.route('/info/<user_id>')
def info_judge(user_id):
user = None
if int(user_id) == 1:
user = User(1,'李明')
return render_template('info.html',user=user)
这里我们写了一个函数进行判断如果参数为1,就返回user.user_name;如果不为1,就返回”This no user!“。
如何在模板中使用循环语句呢?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>循环语句</title>
</head>
<body>
{% for user in users %}
<h3>{{user.user_id}}----{{user.user_name}}</h3><br>
{% endfor %}
</body>
</html>
创建list.html静态文件
from flask import Flask,render_template
from models import User
#路由
@app.route('/list')
def list_range():
users = []
for i in range(10):
user = User(i,'学'+str(i))
users.append(user)
return render_template('list.html',users=users)
创建flaskapp.py,引入循环模板语法
模板的继承是什么?我们会发现有一些网页的有些部分是不变的,当跳转相同网页的时候只有中间部分会改变,这种效果该如何展现出来呢?这就要使用到模板的继承。接下来我将给个例子说明这个问题。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板的继承</title>
</head>
<body>
<div>
Header 欢迎光临!
</div>
{% block content %}
{% endblock %}
<div>
Footer 欢迎下次再来!
</div>
</body>
</html>
创建base.html
{% extend block %}
<h3>{{content}}</h3>
{% endblock %}
创建one_page.html
{% extend block %}
<h3>{{content}}</h3>
{% endblock %}
创建secend_page.html
from flask import Flask,render_template
#第一页路由
@app.route('/one_page')
def one_page():
content = '这是第一页!'
return render_template('one_page.html',content=content)
#第二页路由
@app.route('/secend_page')
def secend_page():
content = '这是第二页!'
return render_template('secend_page.html',content=content)
创建flaskapp.py
运行flaskapp.py我们发现改变url路径(/one_page,secend_page)只有中间部分会发生改变。
基本内容
消息提示
异常捕获
异常处理
问题引出:我们在登录一个网站的时候,第一栏是账号,第二栏是密码,这个是最基本的登录方式,有的可能会加上验证码。当我们什么都不输入时,点击登录按钮,网页会提示“请输入账号“;当我们输入账号时,点击登录,网页会提示”请输入密码“;当我们输入错误的账号密码时,网页会提示”您输入的密码或账号有误“;当我们输入正确的账号密码时,网页自动跳转到登录后的页面。这四种消息提示是我们登录遇到过的最基本的情况,如何用Flask的消息提示把它展示出来呢?接下来我将用代码来展示这四种消息提示。
from flask import Flask,render_template,flash,request
app = Flask(__name__)
#对flash的内容加密
app.secret_key = '123'
#路由
@app.route('/login',methods=['POST'])
def login():
#获取表单上传的数据
form = request.form
username = form.get('username')
password = form.get('password')
#进行判断
if not username:
flash("亲,请输入账号")
return render_template("index.html")
if not password:
flash("亲,请输入密码")
return render_template("index.html")
if username == "xiaojiu" and password == "12345":
flash("login success")
return render_template("index.html")
else:
flash("亲,您输入的账号或密码有误!")
return render_template("index.html")
#运行
if __name__=="__main__":
app.run()
flaskapp.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask消息提示与异常捕获</title>
</head>
<body>
<h1>Login</h1>
<form action="/login" method="post">
<input type="text" name="username" placeholder="账号"><br />
<input type="password" name="password" placeholder="密码" style="margin-top:10px"><br />
<input type="submit" value="Submit" style="margin-left:50px;margin-top:10px">
</form>
<!--这里获取的是一个数组-->
{{get_flashed_messages()[0]}}
</body>
</html>
index.html文件
问题提出:当我们访问一个网站的时候不小心把它的路径名称写错了,此时网页将显示的是什么呢?404 notfound?还是别的呢?我们又如何处理这种情况呢?
首先,如果创建网站的人没有设置异常捕获及处理它会出现404;如果处理了的话,那就显示的为处理后的页面。
所以,我们的异常处理也就是对返回的404页面返回我们设置的页面。
from flask import Flask,render_template,abort
app = Flask(__name__)
#异常捕获一
@app.errorhandler(404)
def NotFound():
return render_template("404.html")
#异常捕获二
@app.route('/user/<user_id>')
def user_info(user_id):
if int(user_id) == 1:
return render_template("user.html")
else:
abort(404)
if __name__=="__main__":
app.run()
flaskapp.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask异常捕获与处理</title>
</head>
<body>
<h2>抱歉,你访问的页面去火星了......</h2><br />
<h2>请检查你的网址是否输入正确哦!</h2>
</body>
</html>
404.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>User</h1>
</body>
</html>
user.html文件
希望大家多多关注,多多支持,感谢!!!

我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称