一个目的加括号执行【澳门太陽城集团登录网址】

2、详解

1、配置文件

flask的安顿文件在哪儿啊?那几个都以私下认可的布置文件,

from flask import Flask

duo=Flask(__name__)

print(duo.config)

#<Config {'ENV': 'production', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 
'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 
'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 
'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 
'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True,
'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200), 'TRAP_BAD_REQUEST_ERRORS': None,
'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json',
'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093}>

配置文件是足以修改的,那在哪儿改?大家那有这般三个语法:

duo.config.from_object('setting.Foo')  #还是上面的setting.py文件

我们来看看.from_澳门太陽城集团登录网址,object 中的源码:

澳门太阳集团城网址 1

 

澳门太阳集团城网址 2

 

 澳门太阳集团城网址 3

咱俩随后的布置文件,能够转换不等同的类,开垦条件三个类,线上遭受一个类,一样的静态属性叁个类,大家依照具体的条件只需改三个类名字就足以了

 

2、路由系统

@duo.route(url,methods(允许须要的法门),endpoint(值))

-endpoint 
 ,反向生成USportageL,若无endpoint设定的值,那么暗中同意的那正是函数名

-url_for(‘endpoint设定的值’)

from flask import Flask,url_for

duo=Flask(__name__)

# print(duo.config)
duo.config.from_object('setting.Foo')
# print(duo.config)



@duo.route('/index/',methods=['GET','POST'])   #endpoint就是django反向生成的name,如果不写endpoint,url_for后面的值就是函数名
def index():
    print(url_for('index'))   #反向生成url
    return "hello world"

if __name__ == '__main__':
    duo.run()

 我们在django中不常url会带上对象的nid值,这些在flask中是哪些的格式呢?

  • 澳门太阳集团城网址,@duo.route(‘/user/<username>’)      字符串
  • @duo.route(‘/post/<int:post_id>’)      整数
  • @duo.route(‘/post/<float:post_id>’)    浮点
  • @duo.route(‘/post/<path:path>’)       路径
  • @duo.route(‘/login’, methods=[‘GET’, ‘POST’])

可是默许是不帮忙正则!   

那正是动态的路由

from flask import Flask,url_for

duo=Flask(__name__)

# print(duo.config)
duo.config.from_object('setting.Foo')
# print(duo.config)

@duo.route('/index/<int:nid>',methods=['GET','POST'])   #int是用来约束在url的值
def index(nid):
    print(nid)
    print(url_for('index',nid=1))     #有参数要加参数
    return "hello world"

if __name__ == '__main__':
    duo.run()

 

3、FBV(CBV前边再介绍)

4、央求相关,响应相关

from flask import Flask,jsonify,make_response

duo=Flask(__name__)
@duo.route('/index/<int:nid>',methods=['GET','POST'])   #int是用来约束在url的值
def index(nid):
    # 请求相关信息
    # request.method
    # request.args
    # request.form
    # request.values
    # request.cookies
    # request.headers
    # request.path
    # request.full_path
    # request.script_root
    # request.url
    # request.base_url
    # request.url_root
    # request.host_url
    # request.host
    # request.files
    # obj = request.files['the_file_name']
    # obj.save('/var/www/uploads/' + secure_filename(f.filename))


    # 响应相关信息
    # return "字符串"
    # return render_template('html模板路径',**{})
    # return redirect('/index.html')
    # return jsonify({'k1':'v1'})    #jsonify帮你序列化
    obj=make_response('Index')    #把返回给用户的字符串,封装到这个对象    
    obj.headers['duoduo']=666   #设置响应头
    return obj
if __name__ == '__main__':
    duo.run()

运行后:

澳门太阳集团城网址 4

6、模板的渲染

四个登陆验证,能够导入before_request,未有再次回到值就是足以由此,有再次来到值就无法透过

from flask import Flask,request,before_request,session

duo=Flask(__name__)

@duo.before_request
def xxxxx():
    if request.path =='/login':  #只有登入视图可以访问
        return None
    if session.get('user') :
        return None

    return redirect('login')  #  上面不通过,返回登入页面

-基本数据类型:能够实施python的语法,如:dict.get() list[‘xx’]

-传入函数

django,自动执行

flask,不自行施行

-全局定义函数

@duo.template_global()

@duo.template_filter()

-模板的存在延续

{%extends ‘给谁’%}

{%block content%}

{% endblock%}

-include  直接加页面

-安全情势显示

前端:{{obj|safe}}

后端:Markup(‘obj’)

 

7、session 

session在视图中可以字典来利用,为何能作为字典,大家来看一下源码:

from flask.sessions import SecureCookieSession

澳门太阳集团城网址 5

 承接了dict,不用多说如何

澳门太阳集团城网址 6

当呼吁刚进入时:flask读取cookie中session对应的值:将这些值解密并反体系化成字典,归入内部存款和储蓄器,以便视图函数使用,

一个目的加括号执行【澳门太陽城集团登录网址】。当呼吁甘休时:flask会读取内部存款和储蓄器中字典的值,在张开系列化+加密,写入到用户的cookie中。(那就是session的机制)

 session的配备是可以改的,关于session有以下几点:

 'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),     #生命周期
'SESSION_COOKIE_NAME':                  'session'  #名称
'SESSION_COOKIE_DOMAIN':                None    #域名
'SESSION_COOKIE_PATH':                     None       #路径
‘SESSION_COOKIE_HTTPONLY':             True    #支持HP读取
'SESSION_COOKIE_SECURE':                False  #安全性
'SESSION_REFRESH_EACH_REQUEST':   True    #最后一次访问的时间保持

一个目的加括号执行【澳门太陽城集团登录网址】。8、flash

在session中存款和储蓄一会数码,读取时经过pop将数据移除,以此来创设八个效果,只存贰回,只可以取一回

实例:

from flask import Flask,flash,get_flashed_messages

duo=Flask(__name__)
duo.secret_key='duoduo'   #这是一个容易忘记的点
#出现secret_key 的报错就是这个设置

@duo.route('/page1')
def page1():
    flash('大娃','boy')   
    flash('二娃','boy')
    flash('蛇精','girl')
    return 'session'

@duo.route('/page2')
def page2():
    print(get_flashed_messages(category_filter=['boy']))

    return 'session'

if __name__ == '__main__':
    duo.run()

拜见一下,取一下,大家来拜候源码:

澳门太阳集团城网址 7

 

澳门太阳集团城网址 8

 

 9、中间件

那大家先来询问一下flask是怎么运作起来的:

一个目的加括号执行【澳门太陽城集团登录网址】。先写二个简练的脚本:

from flask import Flask
duo=Flask(__name__)

@duo.route('/index')
def index():
    print('index')
    return 'Index'

if __name__ == '__main__':
    duo.run()

先是,先点开源码的duo.run:

  澳门太阳集团城网址 9

run的self就是flask的指标,诉求步向第三给参数后边加括号,是或不是flask的靶子加括号,就是调用,对象调用实施__call__方法:

duo.__call__  #进去看看

澳门太阳集团城网址 10

当上边的剧本运营,唯有伏乞访谈,才实行__call__方法

三个简约的选拔

from flask import Flask

duo=Flask(__name__)

@duo.route('/index')
def index():
    print('index')
    return 'Index'

class Middleware(object):
    def __init__(self,old):
        self.old=old

    def __call__(self, *args, **kwargs):
        print('执行前')
        ret=self.old(*args,**kwargs)
        print('执行后')
        return ret

if __name__ == '__main__':
    duo.wsgi_app=Middleware(duo.wsgi_app)   
    duo.run()

 

10、特殊的装饰器(着重)

一个目的加括号执行【澳门太陽城集团登录网址】。before_request   #何人先定义推行

after_request   #从后往上进行

那地点几个原理正是把函数名放到一个列表,然后循环的体制

from flask import Flask

duo=Flask(__name__)


@duo.before_request
def x1():
    print('before')

@duo.after_request
def x2(reponse):    #这里必须要有返回值
    print('after')
    return reponse

@duo.route('/index1')
def index1():
    print('index')
    return 'Index'

@duo.route('/order')
def order():
    print('order')
    return 'order'

if __name__ == '__main__':
    duo.run()

此地有三个在意点正是,before_request有重回值的话,要走富有的after_request
,在django1.9以前都只是以此流程,后来改了机制,

小编们开采1.10过后,走最外侧叁当中间件就回来。

 

before_一个目的加括号执行【澳门太陽城集团登录网址】。first_request      #只进行运转起来
第贰回,后就不再实行,后边详细看源码

template_global    #  渲染 全局定义函数

一个目的加括号执行【澳门太陽城集团登录网址】。template_filter     #   分化的全局定义函数

 errorhandler   #定制错误音讯

@duo.errorhandler(404)
def not_found(arg):
    print(arg)
    return '没找到'    #定制错误信息的页面比较常用

 

二、前奏学习werkzurg

先来回看二个知识点:一个类加括号会试行__init__艺术,三个目的加括号试行__call__方法

事例1:

from werkzeug.wrappers import Request, Response

@Request.application
def hello(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 4000, hello)

#封装了请求和相应的对象

flask正是依赖上面一步一步搭建起来的!

 

三、学习flask

第一个flask:

from flask import Flask

duo=Flask(__name__)

duo.run()   

三行  运营了先后,不过访谈url,开采是Not  Found  !!!

什么样来头吗?按理说访问url,推行函数,再次来到结果,大家开采大家拜会了,不过从未收取,在django应该怎么写,写个路由写个视图,在那也是平等

from flask import Flask

duo=Flask(__name__)

@duo.route('index')
def index():
    return "hello world"

duo.run()  

#这下执行就访问成功

以此duo.run
正是开行socket,这些本子要以主函数去运作的时候,选取进行duo.run,别人如果导入的时候,run是不该试行的:

from flask import Flask

duo=Flask(__name__)

@duo.route('index')
def index():
    return "hello world"

if __name__ == '__main__': 
    duo.run()

二个flasl实现容易的报到:

from flask import Flask,render_template,request,redirect,session 

duo=Flask(__name__)
duo.secret_key='shuai'   #加密方式

@duo.route('/login',methods=['GET','POST'])    #默认GET 别的请求还要添加
def login():

    if request.method == 'GET':
        #return 'Login'   #HttpResponse  django    返回字符串
        return render_template('login.html')
    #request.form ----------》#request.POST
    #request.args ----------》 #request.GET
    user=request.form.get('user')
    pwd=request.form.get('pwd')
    if user=='duoduo' and pwd =='123':
        session['user']=user
        return redirect('/index')
    return render_template('login.html',error='用户名或密码错误')

@duo.route('/index')
def index():
    user=session.get('user')
    if not user:
        return redirect('login')
    return render_template('index.html')


if __name__ == '__main__':
    duo.run()

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
</head>
<body>
    <h1>用户登入</h1>
    <form method="post">
        <input type="text" name="user">
        <input type="password" name="pwd">
        <input type="submit" value="提交">{{error}}
    </form>

</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
</head>
<body>
    <h1>欢迎使用</h1>
    <img src="/static/111.jpg" alt="澳门太阳集团城网址 11">   #图片自己找个
</body>
</html>

 一、概述

最大的表征:短小精悍、可进展强的四个Web框架。注意点:上下文处理机制,正视wsgi:werkzurg
模块

1、简介

1、配置文件                                                             
                             

    模块+静态文件         Flask(__name__,…) 

2、路由系统     装饰器完成的

    @duo.route(‘/index’,methods=[‘GET’])

3、视图             也有fbv,cbv

4、央求相关      导入就能够用,django 而是参数

request.form 

request.args

request.method

5、响应

字符串‘’

render

redirect

6、模块渲染

7、session

session[‘xxx’]=123

session.get(‘xxx’)

8、fiash   (闪现)

9、中间件     基本不用  乞请前的操作

10、特殊的装饰器

 

假诺三个setting.py:

class Foo:
    DEBUG=True
    TEST=True

贰个脚本duoduo.py

path='setting.Foo'

大家什么在path大校Foo那些类找到?如何获取在那之中山大学写的静态字段的值:

澳门太阳集团城网址 12澳门太阳集团城网址 13

import importlib

path='setting.Foo'

p,c=path.rsplit('.',maxsplit=1)


m=importlib.import_module(p)

cls=getattr(m,c)

for key in dir(cls):
    if key.isupper():
        print(key,getattr(cls,key))

#其实这就是配置文件导入原理

答案

三、Flask

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图