学习时间:9:00——11:00 15:00——17:20
Flask入门
Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。Flask没有默认使用的数据库,可以选择MySQL,也可以用NoSQL。其WSGI工具箱采用Werkzeug(路由模块),模板引擎则使用Jinja2。
可以说Flask框架的核心就是Werkzeug和Jinja2。
Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。
Flask比较小,可以帮助更好地入门,但也有弊端就是功能不全,有需求得自行安装扩展包
Flask扩展包:
- Flask-SQLalchemy:操作数据库;
- Flask-migrate:管理迁移数据库;
- Flask-Mail:邮件;
- Flask-WTF:表单;
- Flask-script:插入脚本;
- Flask-Login:认证用户状态;
- Flask-RESTful:开发REST API的工具;
- Flask-Bootstrap:集成前端Twitter Bootstrap框架;
- Flask-Moment:本地化日期和时间;
初始代码如下:
from flask import Flask
app = Flask(__name__)
#路由解析,通过用户访问的路径,匹配相应的函数
@app.route('/')
def hello_world(): # put application's code here
return 'hello!'
if __name__ == '__main__':
app.run(debug=True) #debug默认关闭,开启后可以实时更新网站内容
pycharm社区版貌似直接在app.run()内添加debug = True即可开启debug,专业版需要点击附近的倒三角找到编辑配置,并打√才能开启
通过访问路径,获取用户的参数:
from flask import Flask
app = Flask(__name__)
#路由解析,通过用户访问的路径,匹配相应的函数
@app.route('/user/<name>')
def hello_world(name): # put application's code here
return 'hello!'+f"{name}"
if __name__ == '__main__':
app.run(debug=True)
路由路径不能重复,用户通过唯一路径访问特定函数
from flask import Flask,render_template #导入render_template渲染网页
import datetime
app = Flask(__name__)
#路由解析,通过用户访问的路径,匹配相应的函数
@app.route('/')
def hello_world(): # put application's code here
time = datetime.date.today()
return render_template("index.html", var = time) #传递的一般变量用var
if __name__ == '__main__':
app.run(debug=True)
导入render_template后在templates文件中新建html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
今天是{{ var }},hello! #注意一般变量用双层大括号括起来!!!
</body>
</html>
from flask import Flask,render_template
import datetime
app = Flask(__name__)
#路由解析,通过用户访问的路径,匹配相应的函数
@app.route('/')
def hello_world(): # put application's code here
time = datetime.date.today()
name = ['fancy','Mike','John']
return render_template("index.html", var = time,name_list = name)
if __name__ == '__main__':
app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
今天是{{ var }},hello!<br/> #<br/>为换行
今天的卷王是:<br/>
{% for data in name_list %} #控制语句用{% %}括起来!!!!
{{ data }} #一般变量仍用{{ }}括起来
{% endfor %} #for循环要加上结束语句
</body>
</html>
豆瓣top250首页制作
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template("index.html")
@app.route('/index')
def home():
# return render_template("index.html")
return index()
@app.route('/movie')
def movie():
return render_template("movie.html")
@app.route('/score')
def score():
return render_template("score.html")
@app.route('/word')
def word():
return render_template("word.html")
@app.route('/team')
def team():
return render_template("team.html")
if __name__ == '__main__':
app.run()
<!-- ======= Header ======= -->
<header id="header">
<div class="container">
<div class="logo float-left">
<h1 class="text-light"><a href="/index"><span>Mamba</span></a></h1>
<!-- Uncomment below if you prefer to use an image logo -->
<!-- <a href="index.html"><img src="static/assets/img/logo.png" alt="" class="img-fluid"></a>-->
</div>
<nav class="nav-menu float-right d-none d-lg-block">
<ul>
<li class="active"><a href="/index">首页<i class="la la-angle-down"></i></a></li>
<li><a href="/movie">电影</a></li>
<li><a href="/score">评分</a></li>
<li><a href="/word">词云</a></li>
<li><a href="/team">团队</a></li>
</ul>
</nav><!-- .nav-menu -->
</div>
</header><!-- End Header -->
<!-- ======= Top Section ======= -->
<section id="team" class="team">
<div class="container">
<div class="section-title">
<h2>豆瓣电影Top250数据分析</h2>
<p>应用python爬虫、Flask框架、Echarts、WordCloud等技术实现</p>
</div>
</div>
<!-- ======= Counts Section ======= -->
<section class="counts section-bg">
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-6 text-center" data-aos="fade-up">
<a href="/movie">
<div class="count-box">
<i class="icofont-simple-smile" style="color: #20b38e;"></i>
<span data-toggle="counter-up">250</span>
<p>经典电影</p>
</div>
</a>
</div>
<div class="col-lg-3 col-md-6 text-center" data-aos="fade-up" data-aos-delay="200">
<a href="/score">
<div class="count-box">
<i class="icofont-document-folder" style="color: #c042ff;"></i>
<span data-toggle="counter-up">1</span>
<p>评分统计</p>
</div>
</a>
</div>
<div class="col-lg-3 col-md-6 text-center" data-aos="fade-up" data-aos-delay="400">
<a href="/word">
<div class="count-box">
<i class="icofont-live-support" style="color: #46d1ff;"></i>
<span data-toggle="counter-up">5693</span>
<p>词汇统计</p>
</div>
</a>
</div>
<div class="col-lg-3 col-md-6 text-center" data-aos="fade-up" data-aos-delay="600">
<a href="/team">
<div class="count-box">
<i class="icofont-users-alt-5" style="color: #ffb459;"></i>
<span data-toggle="counter-up">1</span>
<p>团队成员</p>
</div>
</a>
</div>
</div>
</div>
</section><!-- End Counts Section -->
</section><!-- End Our Team Section -->
<!-- ======= Footer ======= -->
<footer id="footer">
<div class="container">
<div class="copyright">Copyright © 2020.Company name All rights reserved.<a target="_blank" href="http://sc.chinaz.com/moban/">网页模板</a></div>
<div class="credits"></div>
</div>
</footer><!-- End Footer -->