python做的小项目实例_Flask-Movie-小项目实战

站在世界的尽头,再回首,世界如此温柔,纵然风狂雨骤,再也不害怕无路可退。

目录结构

QQ截图20180815152300.jpg.jpg

│ manage.py 启动文件

└─app 总项目文件夹

│ models.py 数据库模块

│ __init__.py 初始化app对象

├─admin 后台管理模块

│ forms.py 后台表单验证

│ view.py 后台视图函数

│ __init__.py 后台创建蓝图

├─home 前台展示模块

│ forms.py 前台表单验证

│ view.py 前台视图函数

│ __init__.py 前台创建蓝图

├─static 静态文件夹/css/js/图片

└─templates HTML模板

├─admin 管理模板

└─home 前台模板

蓝图构建

关于蓝图的使用方法传送门

修改app/admin/__init__.py

from flask import Blueprint

admin_print = Blueprint('admin',__name__)

import view

修改app/admin/view.py

sys.path.append('..')

from . import admin_print

@admin_print.route('/')

def index():

return 'hello word'

修改app/home/__init__.py

from flask import Blueprint

home_print = Blueprint('home',__name__)

import view

修改app/home/view.py

from . import home_print

@home_print.route('/')

def index():

return 'hello word web'

修改app/__init__.py

from admin import admin_print

from home import home_print

from flask import Flask

app = Flask(__name__,template_folder='templates',static_folder='static')

app.register_blueprint(admin_print,url_prefix='/admin')

app.register_blueprint(home_print)

修改manage.py

import sys

sys.path.append('..')

from app import app

reload(sys)

sys.setdefaultencoding('utf-8')

app.run()

然后运行manage.py,这个时候访问

http://127.0.0.1:5000/ 返回 hello word web

http://127.0.0.1:5000/admin/ 返回 hello word

数据模型

使用SQLALchemy来创建数据库,数据库模型的功能都写在注释里面。

关于数据库模型的使用方法传送门

首先登录mysql,创建movie数据库。

2018-08-23%2014-42-28%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png

# -*-coding:utf-8-*-

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

import datetime

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1:3306/movie'

# 用于连接数据的数据库

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。

db = SQLAlchemy(app)

# 实例化对象

会员class User(db.Model):

__tablename__ = "user"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 昵称

pwd = db.Column(db.String(100)) # 密码

email = db.Column(db.String(100), unique=True) # 邮箱

phone = db.Column(db.String(11), unique=True) # 手机号码

info = db.Column(db.Text) # 个性简介

face = db.Column(db.String(255), unique=True) # 头像

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 注册时间

uuid = db.Column(db.String(255), unique=True) # 唯一标志符

userlogs = db.relationship('Userlog', backref='user') # 会员日志外键关系关联

comments = db.relationship('Comment', backref='user') # 评论外键关系关联

moviecols = db.relationship('Moviecol', backref='user') # 收藏外键关系关联

def __repr__(self):

return "" % self.name

员登录日志class Userlog(db.Model):

__tablename__ = "userlog"

id = db.Column(db.Integer, primary_key=True) # 编号

user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属会员

ip = db.Column(db.String(100)) # 登录IP

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间

def __repr__(self):

return "" % self.id

标签class Tag(db.Model):

__tablename__ = "tag"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 标题

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

movies = db.relationship("Movie", backref='tag') # 电影外键关系关联

def __repr__(self):

return "" % self.name

电影class Movie(db.Model):

__tablename__ = "movie"

id = db.Column(db.Integer, primary_key=True) # 编号

title = db.Column(db.String(255), unique=True) # 标题

url = db.Column(db.String(255), unique=True) # 地址

info = db.Column(db.Text) # 简介

logo = db.Column(db.String(255), unique=True) # 封面

star = db.Column(db.SmallInteger) # 星级

playnum = db.Column(db.BigInteger) # 播放量

commentnum = db.Column(db.BigInteger) # 评论量

tag_id = db.Column(db.Integer, db.ForeignKey('tag.id')) # 所属标签

area = db.Column(db.String(255)) # 上映地区

release_time = db.Column(db.Date) # 上映时间

length = db.Column(db.String(100)) # 播放时间

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

comments = db.relationship("Comment", backref='movie') # 评论外键关系关联

moviecols = db.relationship("Moviecol", backref='movie') # 收藏外键关系关联

def __repr__(self):

return "" % self.title

上映预告class Preview(db.Model):

__tablename__ = "preview"

id = db.Column(db.Integer, primary_key=True) # 编号

title = db.Column(db.String(255), unique=True) # 标题

logo = db.Column(db.String(255), unique=True) # 封面

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.title

评论class Comment(db.Model):

__tablename__ = "comment"

id = db.Column(db.Integer, primary_key=True) # 编号

content = db.Column(db.Text) # 内容

movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所属电影

user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属用户

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.id

电影收藏class Moviecol(db.Model):

__tablename__ = "moviecol"

id = db.Column(db.Integer, primary_key=True) # 编号

movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所属电影

user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属用户

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.id

权限class Auth(db.Model):

__tablename__ = "auth"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 名称

url = db.Column(db.String(255), unique=True) # 地址

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.name

角色class Role(db.Model):

__tablename__ = "role"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 名称

auths = db.Column(db.String(600)) # 角色权限列表

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

admins = db.relationship("Admin", backref='role') # 管理员外键关系关联

def __repr__(self):

return "" % self.name

管理员class Admin(db.Model):

__tablename__ = "admin"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 管理员账号

pwd = db.Column(db.String(100)) # 管理员密码

is_super = db.Column(db.SmallInteger) # 是否为超级管理员,0为超级管理员

role_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 所属角色

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

adminlogs = db.relationship("Adminlog", backref='admin') # 管理员登录日志外键关系关联

oplogs = db.relationship("Oplog", backref='admin') # 管理员操作日志外键关系关联

def __repr__(self):

return "" % self.name

管理员登录日志class Adminlog(db.Model):

__tablename__ = "adminlog"

id = db.Column(db.Integer, primary_key=True) # 编号

admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员

ip = db.Column(db.String(100)) # 登录IP

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间

def __repr__(self):

return "" % self.id

操作日志class Oplog(db.Model):

__tablename__ = "oplog"

id = db.Column(db.Integer, primary_key=True) # 编号

admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员

ip = db.Column(db.String(100)) # 登录IP

reason = db.Column(db.String(600)) # 操作原因

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间

def __repr__(self):

return "" % self.id

创建数据库if __name__ == "__main__":

db.create_all()

role = Role(

name="超级管理员",

auths=""

)

db.session.add(role)

db.session.commit()

from werkzeug.security import generate_password_hash

admin = Admin(

name="imoocmovie",

pwd=generate_password_hash("imoocmovie"),

is_super=0,

role_id=1

)

db.session.add(admin)

db.session.commit()

突然变成了一个小新闻页面

事情是这样的,我家的猫今天接了个电话就出门了到现在还没回来,所以视频网站项目没有跟着做了,转而做一个类似新闻的网站,使用的mysql数据库+flask框架+bootstrap框架做一个类似今日头条的网站。

目录结构设计如上面的结构一样。

News/

├── admin

│ ├── forms.py

│ ├── __init__.py

│ └── views.py

├── home

│ ├── forms.py

│ ├── __init__.py

│ └── views.py

├── manage.py

├── models.py

├── static

└── templates

数据库模型设计

简单的每张新闻都必须包含如下数据结构

id:唯一标识符

title:新闻标题

content:新闻内容

author:作者

add_time:创建时间

image:新闻缩略图

type:新闻类型

views_count:阅读量

is_valid:删除标记

创建好了之后随便插入几条数据进去,然后随便查询几条数据测试一下

#!usr/bin/env python

# -*- coding:utf-8 _*-

"""

@author :langzi

@file :models.py

@time :2018/08/{DAY}

@Blog :www.langzi.fun

"""

from flask_sqlalchemy import SQLAlchemy

from flask import Flask

from datetime import datetime

import pymysql

print '开始检查数据库是否运行进行连接'

try:

coon = pymysql.connect(host='127.0.0.1',user='root',passwd='root',port=3306)

cur = coon.cursor()

print 'connect success,try create database'

cur.execute('create database langzinews')

coon.commit()

cur.close()

coon.close()

except BaseException,e:

print e

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@127.0.0.1:3306/langzinews?charset=utf8'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

class News(db.Model):

__tablename__ = 'news'

id = db.Column(db.Integer,primary_key=True, autoincrement=True)

title = db.Column(db.String(200), unique=True)

content = db.Column(db.Text)

author = db.Column(db.String(20))

type = db.Column(db.String(10),index=True)

image = db.Column(db.String(255))

add_time = db.Column(db.DateTime, default=datetime.now())

is_valid = db.Column(db.Integer,default=1)

view_count = db.Column(db.Integer)

def __repr__(self):

return ''%self.title.encode('utf-8')

db.create_all()

me = News(title='PEP8规则',content='不要使用 tab 缩进\

使用任何编辑器写 Python,请把一个 tab 展开为 4 个空格\

绝对不要混用 tab 和空格,否则容易出现 IndentationError\

',author='langzi',type='Python',image='/static/image/a.jpg',add_time=datetime.now(),is_valid=1,view_count=100)

me2 = News(title='Python可视化初探',content='pyecharts 是一个用于生成 Echarts 图表的类库。\

Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,\

方便在 Python 中直接使用数据生成图。'

,author='langzi',type='Pyecharts',image='/static/image/ab.jpg',add_time=datetime.now(),is_valid=1,view_count=2000)

# db.session.add(me)

# db.session.commit()

# db.session.add(me2)

# db.session.commit()

res = News.query.filter_by(title='Python可视化初探').first()

print res.content

print res.author

print type(res)

运行结果:

/usr/bin/python2 /home/langzi/PycharmProjects/News/app/models.py

开始检查数据库是否运行进行连接

connect success,try create database

pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。

langzi

好的,下面来编写一个基于 Flask 的小网站。这个网站将会有一个主页和一个联系页面。 首先,需要安装 Flask。在命令行中输入以下命令: ``` pip install flask ``` 接着,在你的项目文件夹中创建一个名为 `app.py` 的 Python 文件,并按照以下步骤进行编写。 第一步,导入 Flask 模块和其他需要的模块。可以使用以下代码: ```python from flask import Flask, render_template, request ``` 第二步,创建 Flask 应用程序实例。使用以下代码: ```python app = Flask(__name__) ``` 第三步,定义主页路由和视图函数。使用以下代码: ```python @app.route('/') def index(): return render_template('index.html') ``` 这个视图函数将会渲染 `index.html` 模板并返回它的内容。 第四步,定义联系页面路由和视图函数。使用以下代码: ```python @app.route('/contact', methods=['GET', 'POST']) def contact(): if request.method == 'POST': email = request.form['email'] message = request.form['message'] # 将电子邮件和消息发送到你的收件箱 return 'Thank you for your message!' else: return render_template('contact.html') ``` 这个视图函数处理 GET 和 POST 请求。如果请求是 GET,它将会渲染 `contact.html` 模板并返回它的内容。如果请求是 POST,它将会从表单中获取电子邮件和消息的内容,并将它们发送到你的收件箱。 第五步,编写模板。在你的项目文件夹中创建一个名为 `templates` 的文件夹,并在其中创建两个名为 `index.html` 和 `contact.html` 的模板文件。 这里提供一个简单的 `index.html` 模板作为示例: ```html <!DOCTYPE html> <html> <head> <title>My Website</title> </head> <body> <h1>Welcome to my website!</h1> <p>Here you can find information about me and my work.</p> </body> </html> ``` 这是一个简单的 `contact.html` 模板作为示例: ```html <!DOCTYPE html> <html> <head> <title>Contact Me</title> </head> <body> <h1>Contact Me</h1> <form method="POST"> <label for="email">Email:</label> <input type="email" id="email" name="email" required><br><br> <label for="message">Message:</label> <textarea id="message" name="message" required></textarea><br><br> <input type="submit" value="Send"> </form> </body> </html> ``` 第六步,运行应用程序。在命令行中输入以下命令: ``` python app.py ``` 这将会运行 Flask 应用程序并在本地主机的默认端口上启动它。在浏览器中访问 `http://127.0.0.1:5000/` 将会显示主页,访问 `http://127.0.0.1:5000/contact` 将会显示联系页面。 这就是一个简单的基于 Flask 的网站的示例。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值