MVC—Flask网站制作(14)

Posted 光荣之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC—Flask网站制作(14)相关的知识,希望对你有一定的参考价值。

新书

速递

吴老的java版《selenium webdriver 实战宝典》python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。

文 | 远山近海

Flask网站制作框架

快速制作网站就是这么容易!
安装:pip install Flask














flask的MVC

MVC概念

V:
视图,即页面,如html、jsp等格式
M:
模型,代表数据和业务逻辑,其实也就是后台接口,用于对业务逻辑进行处理,其中包含操作数据库
模型对于数据来说是中立,任何一个模型都不是针对某一数据而写的,而是通用的,一个模型可以为任何一个或多个试图提供数据,M通常是代码量最多也是最复杂的部分
C:
控制器,接收用户的请求数据,调用M来处理用户的请求数据,再把处理结果传递给V展示给客户,C由于仅负责调用,所以通常是代码最少的部分
MVC的调用顺序:
用户通过V把请求数据传递给C,C再调用M来处理用户的请求数据,M处理完成后把结果传递给V,V再把结果展示给用户。

可插拔的视图

  1. 在MVC中,通常会把一个模块(多个页面的多个子功能)放到一个包中,如所有与登录和注册相关功能放到一个包中。 在每个包中,都有一个自己本包的视图文件
  2. 在本包的视图文件中,会把本包内所有的视图函数放到一个文件内,但这个文件仅限于放视图函数,启动项目不在此文件中
  3. 要有一个主文件,用于启动项目

基于类的视图

把所有视图都写成类的形式,统一存放在一个文件中

MVC—Flask网站制作(14)

views.py
# coding=utf-8from flask.views import Viewfrom flask import render_template,request
class login(View): methods = ["GET","POST"] def dispatch_request(self): if request.method=="GET": pass else: pass return render_template("/login.html/")
class zhuce(View): methods = ["GET", "POST"] def dispatch_request(self): if request.method=="POST": pass else: pass return render_template("/zhuce.html/")
1.每一个页面对应一个类,类的名称要和页面名称一致,且必须继承自flask.views.View
2.可在类里面,函数外面,指定该类所对应的页面的数据发送方法,即GET或POST
注意: 在指定数据发送方法时,methods是带s的,在判断数据发送方法时,request.method是不带s的
3. 类里的函数必须叫做dispatch_request(self)这是必须写死的
main.py
# coding=utf-8from flask import Flaskfrom login.views import *
app = Flask(__name__) # 创建了一个Flask类的实例app.secret_key="123"
app.add_url_rule("/login/",view_func=login.as_view("login"))
app.add_url_rule("/zhuce/",view_func=zhuce.as_view("zhuce"))
if __name__ == '__main__': app.debug = True app.run(port=8080)
  1. 主文件里只为视图函数设置URL规则
  2. app.add_url_rule中的/login/和/zhuce/均代表各自的URL
  3. view_func=login.as_view("login"))或view_func=login.as_view("zhuce"))中的login和zhuce代表的是视图函数里类的函数名,也叫中节点,相当于不使用MVC时视图函数的名称,由于在基于类的视图中,类里的视图函数的名称是统一的,没有自己独立的名称,所以要在主函数里指定一个其自己的名称,在页面中,如果需要跳转到该页面,href后面写的就是主函数里指定的函数名
login.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>登录</title> <link href="dist/css/bootstrap.css" rel="stylesheet"></head><body><h3>登录页面</h3><script src="dist/jquery.min.js"></script><script src="dist/js/bootstrap.js"></script></body></html>
zhuce.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>注册</title> <link href="dist/css/bootstrap.css" rel="stylesheet"></head><body><h3>注册页面</h3><script src="dist/jquery.min.js"></script><script src="dist/js/bootstrap.js"></script></body></html>
运行结果
运行主文件,在浏览器输入http://127.0.0.1:8080/login/

MVC—Flask网站制作(14)

输入http://127.0.0.1:8080/zhuce/

MVC—Flask网站制作(14)

基于方法的视图

基于方法的视图与基于类的视图的唯一区别就在于视图文件里视图类的写法,其他文件的写法都一样
views.py
# coding=utf-8from flask.views import MethodViewfrom flask import render_template,request
class login(MethodView): def get(self): return render_template("/login.html/") def post(self): pass
class zhuce(MethodView): def get(self): return render_template("/zhuce.html/") def post(self): pass
  1. 同样是每个类对应一个页面,且类名与页面名要一致
  2. 每个类都要继承自flask.views.MethodView
  3. 类里只有两个方法,get和post,分别对应了get请求和post请求
一定要实战呀!

以上是关于MVC—Flask网站制作(14)的主要内容,如果未能解决你的问题,请参考以下文章

flask框架有啥用?

Flask网站搭建:Ubuntu 14.04 sever (阿里云64bit) 部署 flask + uWSGI + Ngnix

ASP.net MVC 代码片段问题中的 Jqgrid 实现

有没有办法在使用 Asp.Net MVC ActionLink、RedirectToAction 等时包含片段标识符?

如果你的同事这样使用Spring MVC,你该怎么办 ?

深入浅出Flask(14): H-ui前端框架的表格