都快五月份了还没开学在家闲着还是闲着 就想着想着把前端时间的学的python和web前端的一点点知识还有数据库都联系起来做点东西
于是就找到python的web轻量框架flask 现在在跟着李辉的电子书做一个简单电影清单的web程序(电子书地址:https://lanzouj.com/ibhyx7c)有兴趣的小伙伴可以一起来哈
我的环境是pycharm+anaconda+mysql8.0
flask框架模板下面默认有两个文件夹分别是static存放静态文件如:css、图片等 template文件夹存放html模板【图1】【图二】【图三】
这里只给出主程序app.py的代码 静态文件和html模板大家有兴趣的可以自取 https://lanzouj.com/ibhzvsh
代码注释可能写的不够完善,望大家谅解,书中所有代码都作出了相关解释,大家可以下载了查看
目前项目半成品效果图【图四】
[Python] 纯文本查看 复制代码 from flask_sqlalchemy import SQLAlchemy
from flask import Flask, render_template,request,redirect,url_for,flash
import click
#导包
app = Flask(__name__)#创建一个app程序
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1:3306/flask_sql'#我数据库账号密码都是root
# app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://' + os.path. join(app.root_path, 'data.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'dev'
db = SQLAlchemy(app)#以上部分配置数据库
class User(db.Model):#这里对应数据库的一张表,是用户名
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key = True)
name = db.Column(db.String(20))
class Movie(db.Model):#这里也是对应一个表,是每个用户对应的观影清单
__tablename__ = 'list'
id = db.Column(db.Integer,primary_key = True)
title = db.Column(db.String(60))
year = db.Column(db.String(4))
@app.cli.command()#这里是往数据库添加数据,便于测试
def forge():
"""Generate fake data."""
db.drop_all()
db.create_all()
name = 'DaWeiGuo'
movies = [
{'title': 'My Neighbor Totoro', 'year': '1988'},
{'title': 'Dead Poets Society', 'year': '1989'},
{'title': 'A Perfect World', 'year': '1993'},
{'title': 'Leon', 'year': '1994'},
{'title': 'Mahjong', 'year': '1996'},
{'title': 'Swallowtail Butterfly', 'year': '1996'},
{'title': 'King of Comedy', 'year': '1999'},
{'title': 'Devils on the Doorstep', 'year': '1999'},
{'title': 'WALL-E', 'year': '2008'},
{'title': 'The Pork of Music', 'year': '2012'},
]
user = User(name=name)
db.session.add(user)
for m in movies :
movie = Movie(title=m['title'], year=m['year'])
db.session.add(movie)
db.session.commit()
click.echo('Done.')
@app.route('/',methods=['GET','POST'])#flask里边可以用装饰器为每一个url写一个对应的处理函数
def index():
# user = User.query.first().name
# print(user)
if request.method == 'POST':
title = request.form.get('title')
year = request.form.get('yaer')
if not title or not year or len(year) > 4 or len(title) > 60:
flash('Invalid input.')
return redirect(url_for('index'))
movie = Movie(title = title,year = yaer)
db.session.add(movie)
db.session.commit()
flash('Item created')
return redirect(url_for('index'))
movies = Movie.query.all()
# user = User.query.first().name
# print(User)
return render_template('index.html', movies = movies)
#
@app.errorhandler(404)#这里是处理404页面
def page_not_found(e):
# print(e)
# user = User.query.first()
return render_template('404.html'),404
@app.context_processor#这个函数是替换html末班的中所有user变量
def inject_user():
user = User.query.first()
return dict( user = user.name)
if __name__ == '__main__':
# db.drop_all()
app.run()
|