flask-类试图与蓝图、子域名

1.0 类试图的使用

1. 什么是类视图

视图也可以基于类的方式来实现,他的**优点**在于可以继承。
类视图和视图函数不一样,它需要继承“Views.Vive”类,并使用app.add_url_rule('/profile/',view_func=CeShi.as_view('file'))的方式进行注册

2. 类视图的使用
需要在子类中重写 “dispatch_request`”方法,需要返回一个Response或者其他子类的对象。

3. flask还为我们准备了另一种视图,基于调度方法的视图
“views.MethodView”,根据每个http不同方法,执行不同的函数

class ViewIndex(views.MethodView):
    def get(self):
        return render_template('index.html')

    def post(self):
        name = request.form.get('name')
        password = request.form.get('password')

        if name == 'cheney' and password == '123':
             return '登录成功'
        else:
             return '登录失败'

4. 类视图的缺陷
不好用装饰器去装饰,当我们写完一个装饰器后,可以在类视图中定义一个属性“decorators”然后储存装饰器,以后每次调用这个类视图的时候都会调用装饰器。

class View_List(views.View):
    decorators = [hello]
    def dispatch_request(self):
        return '个人中心'

2.0 蓝图

2.1. 蓝图的作用:

当我们开发大项目时,我们的视图函数和URL还在童一个文件中,显然就不合适,这时候我们就需要蓝图,实现项目模块化。

#导入蓝图
form flask import Blueprint
#实例化蓝图
book_bp = Blueprint('name',__name__)
@book_bp.route('/book/')
def book():
    return '这是图书馆首页'

2.2. 蓝图的使用
当创建蓝图后,使用时需要在主程序中去将蓝图注册,映射道URL中

app.register_blueprint(book_bp) #在主程序中注册

2.3. 蓝图注意事项

  1. 寻找静态文件
    在默认状态下,Jinja2模板会在项目static静态文件下寻找,也可以设定,在Blueprint这个构造函数中,有一个参数static_folder中设定静态文件的路径。在模板中引用蓝图时需要,“蓝图名+.+static进行引用”
<link rel="stylesheet" href="{{ url_for('admin.static',filename='book.css') }}">
  1. 寻找模板文件
    在默认状态下,Jinja2模板会在项目templates文件下寻找模板文件,在构造函数Blueprint中有个参数“template_folder=“templates”,可以进行更改,但是不建议更改。模板文件和静态文件渲染是有区别的,模板文件渲染时,flask会优先从根目录下的templates文件下查找文件,如果找不到就会在去蓝图文件下templates文件中查找。

  2. url_for 生成url
    使用urlz-for生成蓝图url时,其使用格式为“蓝图名称+.+视图函数名称”

#以蓝图admin为例子

url_for(admin.index)

蓝图名是在创建蓝图是第一个传入的参数

news_bp = Blueprint('news',__name__,url_prefix=/index/)

3.0 子域名

子域名在许多网站都有使用,如网址xxx.com,可以定义一个子域名,xms.xxx.com,为某个域名的管理系统的网址,子域名也是根据蓝图来进行实现的,之前创建蓝图时参数url_prefix=‘/index/,我们通过/index/来访问url,但是子域名不需要,它需要配置SERVER_NAME.

#如下:需要写进配置文件中
app.config[SERVER_NAME]=XMS.XXX.COM:9000

并且在注册蓝图时,还需要添加一个参数subdomain,这个参数就是子域名的名称
news_bp = Blueprint(‘news’,name,url_prefix=‘/index/’,subdomain=‘xms’)

下面看个实例:

#news蓝图模块
from flask import Blueprint
news_bp = Blueprint('news',__name__,url_prefix=/index/,subdomain=‘xms’)
@news_bp.route('/news/')
def news():
    return '这是新闻首页'


from flask import Flask 
import news   #news为蓝图已创建的模块

app = Flask(__name__)
app.config[SERVER_NAME] = 'taobao.com:8888' #设置子域名

 #在主文件注册蓝图,蓝图中已设置subdomain
app.register_blueprint(news_bp) #

#写完上门两个小程序后,我们还是不能执行子域名xms.taobao.com:8888 成功,还需要更改本机的host文件中添加域名解析,在host文件下写入
127.0.0.1 xms.taobao.com
添加完后就可以访问了,但这个时候,我们在通过以前的127.0.0.1:8888/访问url,是不行的,也不能通过localhost访问。




if __name__ == '__main__':
    app.run(debug=True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值