当前位置: 首页 > 科技观察

轻量级Pythonweb开发框架Flask知识盘点(上)

时间:2023-03-22 11:46:56 科技观察

前言今天给大家介绍一个轻量级的Pythonweb开发框架------Flask。你为什么推荐它?当然是因为它足够轻量,而且它的特点是开发速度快。当然它也有缺点,这里就不说了,因为用起来感觉不好说不好。1.安装flaskpipinstallflask#需要注意的是还有flake,这是一个查错的模块,大家不要混淆了pipinstallflask#需要注意的是,还有flake,这是一个查错的模块,别搞混了看到成功了,一共下载了四个模块,分别是web开发中对应的模板渲染,网络服务都是flask依赖包。二、flask的用法1、启动既然说用法,那么第一个肯定要说的就是它是怎么启动的,不然别人怎么学,废话少说,开始动手吧。fromflaskimportFlaskapp=Flask(__name__)#创建应用实例@app.route('/')#路由装饰器创建路由defhello():#访问该路由时执行的视图函数return'hello'#视图的返回值function,andCall'response'if__name__=='__main__':app.run(debug=True)#开始运行flask应用,以debug模式运行#可以设置启动的主机地址和端口号,具体方法:app.run(host='192.168.1.2',port=3243)从上面可以看出,因为我修改了视图函数和返回值,在浏览器中刷新即可,不需要退出重启,sublimetext3真的是神器,牛逼,wall推荐大家使用。2.创建Flask应用注意事项创建Flask应用,首先我们需要创建一个项目文件夹,这个文件夹至少要有两个文件夹,一个用来存放媒体文件(静态),一个用来存放网页文件(模板),如果Python的程序不多,那么你不需要为它单独创建一个文件夹。Flask不会像Django那样自动创建文件夹,需要我们自己创建。如果想查看flask创建的路由信息??:url_map存放的是url和endpoint的映射关系。那么这个端点是什么意思呢?实际上,当请求一个url时,会先通过rule找到endpoint,然后再根据endpoint找到对应的viewfunction。通常,端点的名称与视图函数的名称相同。这里还要特别注意一点,就是所有的控制台输出信息语句都必须写在app.run()之前,否则无法运行。3、Flask的妙用我们可以看到Flask中有一个名字,是专门用来启动模板的。除此之外,它还有:static_url_path:静态网页地址static_folder:静态地址,默认为静态文件夹template_folder:模板文件文件夹,默认为templates文件夹4、添加配置文件1)直接在app中添加。运行()函数。例如在debug模式下运行Flask应用程序使用:app.run(debug=True)2)直接配置app.config=True3)创建配置文件在项目文件夹根目录下创建配置文件夹,名称是hw.hw,可以选择后缀,内容是DEBUG=True,然后在app.run()('hw.hw')前面加上app.config.from_pyfile即可。5.查看函数使用1)从属页面@app.route('/index')defindex():return'index'2)Converter@app.route('/index/')#定义转换Converternamenumdefnum(num):#将转换器传入函数ifnum>10:#如果其值大于10,则输出dog,如果小于10,则输出pigreturn'dog'else:return'pig'需要什么这里要说的是conversion,converter主要是利用页面后面的值作为一定的标准来得到另一个页面。我们经常看到的加密字符串就是由这个构成的,那么它有哪些类型呢?Flask的默认转换器:DEFAULT_CONVERTERS={Flask的默认转换器:DEFAULT_CONVERTERS={'default':UnicodeConverter,'string':UnicodeConverter,'any':AnyConverter,'path':PathConverter,'int':IntegerConverter,'float':FloatConverter,'uuid':UUIDConverter,}另外,我们还可以自定义一个转换器,定义转换器使用依赖包,如下:classrc(BaseConverter):#重写父类的属性,定义转换器规则def__init__(self,url_map):super(rc,self).__init__(url_map)#验证QQ邮箱正则表达式self.regex='[0-9a-zA-Z_]{0,19}@qq.com'#Define视图函数下的返回值defto_python(self,value):val=valuereturnvaldefto_url(self,value):#returnurl返回值app.url_map.converters['em']=rc#添加自定义转换器到转换器列表@app.route('/emm/')#添加新转换器defemail(email):return'emailis:%s'%email#返回邮件可以通过反向解析来使用添加了自定义转换器的视图功能,这里需要使用重定向和反向解析:@app.route('/search')defjj():url=url_for('email',email='2091500484@qq.com')returnredirect(url)如果不指定转换器类型,默认为字符串类型:@app.route('/hw/')defhw(boy):return'boy:%s'%boy也可以定义默认转换器的默认值:@app.route('/ha/',defaults={'haid':'hello,boy'})#设置默认值defha(haid):return'haid:%s'%haid3)多个路由指向同一个地址@app.route('/1')@app.route('/2')deffg():return'1122'这里,访问下级页面1或者页面2都会得到相同的结果'1122'6.重定向重定向是指从一个网页跳转到另一个网页,它相当于刷新后的操作,涉及到flask中的两个模块(redirect,url_for)1)直接跳转到fromflaskimpo的路由rtredirect,url_for@app.route('/refer')deffer():returnredirect('/1')这样可以直接跳转到路由函数fg,显示返回值。2)间接跳转我们可以先访问路由功能,然后跳转到对应的内容页面@app.route('/ref')defref():returnredirect(url_for('fg'))#跳转到直接访问refsub页面可以直接跳转到对应的页面。7、错误页面的定义有两种方式,一种是使用系统的abort直接赋值,另一种是使用自定义的errorhandler函数。1)abort直接使用系统自带的错误内容@app.route('/use/')defget_use(id):ifint(id)<10:abort(404)elifint(id)>20:return'---Error---'return'hello:%s'%str(id)2)errorhandler自定义错误页面内容@app.errorhandler(404)deferror(err):return'hello,%s'%err3)定义错误页面,可以将自定义错误写入页面,一般用的比较多。@app.route('/error1')deferr1():error1=('indexerror',666,[('key','div'),('value','zero')])returnerror1当然有另一个表达式:@app.route('/error2')deferr2():error2=('loginerror',444,{'serise':'100','dataframe':'200'})returnerror24)setrequesthererequired说到一个新模块make_response(),当然你也可以使用Response()。@app.route('/error3')deferr3():resp=make_response('searcherror')#这里把make_response()换成Response()即可resp.status='400'resp.headers['hrr']='zjj'resp.headers['hw']='zj'returnresp8.json数据读取flask中有一个非常强大的模块可以处理json数据,jsonify。@app.route('/json1')defjson1():data={'name':'HW','first':'ZJ'}returnjsonify(data)@app.route('/json2')defjson2():returnjsonify(hour=12,second=21)9.Cookie操作1)设置cookie#cookiesetting#set_cookie(key,value='',max_age=None,expires=None,path='/',domain=None,secure=False,httponly=False,samesite=None)#key:key#value:value#max_age:设置过期时间(秒)#expires:设置过期时间,时间戳形式(从1970年到现在的时间)#path:当前主域名#domain:子域名#设置cookie和headers@app.route('/set_cookie')defset_cookie():response=make_response('cookie设置成功')#cookie有效期为30天或hoursecondminutetime=datetime.datetime.today()+datetime.timedelta(days=30)#设置cookie的有效时长response.set_cookie('user','admin',expires=time)#设置用户名的cookieresponse.set_cookie('pass','123456',expires=time)#设置密码cookieresponse.headers['X-Something']='mything'#Chineseresponse.headers['Server']='Linux'#servernamereturnresponse2)获取cookie需要使用模块request,相当于模拟一个请求。您可以将其用作请求模块。@app.route('/get_cookie')defget_cookie():name="用户名:"+request.cookies.get('user')+"password:"+request.cookies.get('pass')returnname3)删除cookies有两种方法可以删除cookies。1.可以删除@app.route('/del_cookie1')defdel_cookie1():response=make_response('deletecookie1')response.set_cookie('user','',expires=0)response,设置cookie过期时间为0.set_cookie('pass','',expires=0)返回response2。直接deletecookie@app.route('/del_cookie2')defdel_cookie2():response=make_response('deletecookie2')response.delete_cookie('user')response.delete_cookie('pass')returnresponse10.session操作中保留的内容session是session内容,存在于cookie中,我们可以通过它直接登录一些已经登录过的系统。要操作session,需要引入专门为它准备的session模块,需要配置使用会话的安全密钥。1)设置session1.配置安全密钥:app.config['SECRET_KEY']=os.urandom(30)2.设置session字典session['user']='hw'session['pass']='zj'3.设置session过期方式session.parmanent=True#默认31天后过期#session两小时后过期')defsession1():session['user']='hw'session['pass']='zj'session.parmanent=True#默认31天后过期返回'loginsuccess'可以在cookie中看到session设置成功,浏览器也登录。当然你也可以只设置cookies,但是为了安全,还是建议你设置session。2)获取session与获取cookie有点不同。1、get()获取@app.route('/session2')defsession2():us=session.get("user")pa=session.get("pass")return'hello%s%s'%(us,pa)2.索引获取的方法如果取值失败,容易产生异常。推荐使用前面的方法,除非你知道可以获取到值。@app.route('/session2')defsession2():us=session["user"]pa=session["pass"]return'hello%s%s'%(us,pa)3)还有两个删除session有两种方法,一种是一个一个删除,一种是全部删除。1.一条一条删除@app.route('/session3')defsession3():session.pop('user',None)session.pop('pass',None)return'deletesuccessful!!!!'2.删除所有@app.route('/session4')defsession4():session.clear()return'deletesuccessful!!!!'11.小结本文主要介绍Flask最基本的使用,Flask是一个非常优秀的web开发框架,可以非常快速的开发web应用,但是需要依赖很多包来完善更多的功能。这只是Flask知识的一半左右。下一篇我会继续给大家盘点,大家一起学习,一起进步!