Python+Flask搭建一个电影下载网站

来源:互联网 发布:格式转换软件 编辑:程序博客网 时间:2024/05/21 06:52

1. 写在前面的话

依旧想把Python学好,基础语法部分早就学了,应用部分一点点的渗透,可以往数据分析,爬虫, web,机器学习等方面发展,还有很长的路要走。奋斗奋斗奋斗OK,废话不多说,开始编程。

2. 搭建项目结构

一个好的项目,结构脉络一定要清晰,这样团队合作什么的才能更好协调。虽然我每次的结构也不是很好,但是尽量向这方面发展。如下图:

3. 写好配置文件以及命令行操作文件

需要用到的包有:Flask-Script,Flask-Sqlalchemy,Flask-Migrate等,现写好数据库等配置文件,然后写好manage命令行操作文件,如下:
import osDEBUG = TrueSECRET_KEY = os.urandom(24)DIALECT = 'mysql'DRIVER = 'pymysql'HOST = '127.0.0.1'PORT = '3306'USERNAME = 'root'PASSWORD = 'root'DATABASE = 'movie_demo3'SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}'.format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE)SQLALCHEMY_TRACK_MODIFICATIONS = False

from flask_script import Managerfrom flask_migrate import Migrate, MigrateCommandfrom MovieProject import appfrom exts import dbmanager = Manager(app)# 使用Migrate绑定app和dbmigrate = Migrate(app, db)# 添加迁移脚本的命令到manager中manager.add_command('db', MigrateCommand)if __name__ == '__main__':    manager.run()

4. 编写数据库模型

这里主要写想要存入的电影数据,将你准备好的数据以类的方式存储,如下:
from exts import dbclass Recommend(db.Model):    __tablename__ = 'recommend'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    title = db.Column(db.String(100), nullable=False)    image = db.Column(db.Text, nullable=False)    url = db.Column(db.Text, nullable=False)class Action(db.Model):    __tablename__ = 'action'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    title = db.Column(db.String(100), nullable=False)    image = db.Column(db.Text, nullable=False)    url = db.Column(db.Text, nullable=False)class Fiction(db.Model):    __tablename__ = 'fiction'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    title = db.Column(db.String(100), nullable=False)    image = db.Column(db.Text, nullable=False)    url = db.Column(db.Text, nullable=False)class War(db.Model):    __tablename__ = 'war'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    title = db.Column(db.String(100), nullable=False)    image = db.Column(db.Text, nullable=False)    url = db.Column(db.Text, nullable=False)class Love(db.Model):    __tablename__ = 'love'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    title = db.Column(db.String(100), nullable=False)    image = db.Column(db.Text, nullable=False)    url = db.Column(db.Text, nullable=False)class Funny(db.Model):    __tablename__ = 'funny'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    title = db.Column(db.String(100), nullable=False)    image = db.Column(db.Text, nullable=False)    url = db.Column(db.Text, nullable=False)

5. 最后根据你想要渲染的模版,写出主程序

我在这个网站上面找了一些渲染的模版,然后主程序如下:
from flask import Flask, render_template, request, redirect, url_forimport configfrom exts import dbfrom models import Recommend, Action, Fiction, War, Love, Funnyapp = Flask(__name__)app.config.from_object(config)db.init_app(app)@app.route('/', methods=['GET','POST'])def index():    return render_template('index.html')@app.route('/detail/<name>', methods=['GET','POST'])def detail(name):    page = request.args.get('page', 1, type=int)    if name == 'recommend':        pagination = Recommend.query.paginate(page, per_page=20, error_out=True)    elif name == 'action':        pagination = Action.query.paginate(page, per_page=20, error_out=True)    elif name == 'fiction':        pagination = Fiction.query.paginate(page, per_page=20, error_out=True)    elif name == 'war':        pagination = War.query.paginate(page, per_page=20, error_out=True)    elif name == 'love':        pagination = Love.query.paginate(page, per_page=20, error_out=True)    elif name == 'funny':        pagination = Funny.query.paginate(page, per_page=20, error_out=True)    else:        return '404'    datas = pagination.items    print(page)    return render_template('detail.html', name=name, datas=datas, pagination=pagination)if __name__ == '__main__':    app.run(debug=True)

6. 主要界面展示如下









具体项目地址请见这里,第一次搭建网站,请轻喷。以后会部署到阿里云上面。