flask微视频网站(环境准备)

news/2024/5/9 10:47:32/文章来源:https://blog.csdn.net/Roy_Allen/article/details/120930018

文章目录

  • 简介
  • 项目结构
    • 蓝图
    • 数据库

简介

  • 跟着做一个微电影视频网站
  • Windows
  • Python3.9.6
  • MySQL8.0
  • pycharm
  • 安装py虚拟环境
    # 不添加源就会失败,还提示你要升级pip,千万别升级!
    pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com virtualenv
    # 安装flask
    virtualenv flask_env	# 默认创建在当前目录,dir可以看到,可以跳转到指定目录
    # 如果使用pycharm创建工程默认带venv,这里只是演示一下
    # 后面就选择pycharm创建的venv解释器!
    
  • 使用pycharm的terminal可以自动进入venv环境
    1
    • 不太对,这个terminal会使用其他工程的venv,垃圾!
    • 不过在Settings中设置好即可,不用在意;整理好venv环境,不用的和重复的删掉
    • OK,还是用在venvs目录下单独建立的虚拟环境吧,进入Scripts直接activate,可以看到(flask_mv) D:\pythonDemo\pycWorks\venvs\flask_mv\Scripts>
    • 退出虚拟环境直接使用deactivate
  • 安装flask
    pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com flask
    # pip list 查看安装的包
    # pip freeze > packages.txt	可以导出安装的环境
    # pip install -r packages.txt	就能安装相同的环境
    
  • 测试一下环境
    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def index():return '<h1>Roy Handsome</h1>'if __name__ == '__main__':app.run()
    

项目结构

  • 前台home
    • 数据模型:models.py
    • 表单处理
    • 视图文件
    • 模板目录
    • 静态资源目录:static
  • 后台admin
    • 和前台类似,数据模型、静态资源、模板可以共用,其他独立
    • 还是MVC模型,但这里叫MVT,视图文件V等价于控制器C,前端模板属于T
      2
    • 照着这个创建目录吧!具体的可以通过我的这篇笔记了解

蓝图

  • 使用蓝图管理项目
    • 蓝图可以理解为管理路由和视图的模块,需要在app注册使用
    • 可以直接将蓝图定义在视图函数中
    • 我们这里定义在init文件,所以需要将视图再导入,底层使用了装饰器原理
    # admin/init.py
    from flask import Blueprintadmin = Blueprint('admin', __name__)import app.admin.views
    
    # admin/views.py
    from . import admin@admin.route('/view')
    def index():return '<h1>admin views</h1>'
    # home也是同样
    
    # app/init.py
    from flask import Flaskapp = Flask(__name__)
    app.debug = Truefrom app.home import home as home_bp
    from app.admin import admin as admin_bpapp.register_blueprint(home_bp) # 默认/路径进入到home
    app.register_blueprint(admin_bp, url_prefix='/admin')   # /admin 下归admin蓝图管理
    
    # manage.py
    from app import appif __name__ == '__main__':app.run()
    
    • 此后,我们前后台的路由就可以分别由home/admin蓝图分别来管理了
    • 但是一定要记得在app注册并设置前缀

数据库

  • 使用数据库
    # 还是使用数据库扩展
    pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com flask-sqlalch
    emy
    
    • 配置参数可以根据官方指导
    • 定义两个表模型瞧瞧,外键需要在主表关联(一对多,约束主表)
    from flask_sqlalchemy import SQLAlchemy
    from flask import Flask
    from datetime import datetimeapp = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:123456@localhost:3306/flask_mv"   # show global variables like 'port';
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Truedb = 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(100), 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')   # 外键关系的关联def __repr__(self):return "<User %r>"%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'))   # 外键约束   表.字段   还要在类User中关联!ip = db.column(db.String(100))addtime = db.column(db.DateTime, index=True, default=datetime.now)def __repr__(self):return '<UserLog %r>'%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 '<UserLog %r>'%self.nameclass 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(100), 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(100))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')  # 主表,关联评论表movcoll = db.relationship('MovCollection', backref='movie') # 关联收藏表def __repr__(self):return '<Movie %r>'%self.titleclass 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 '<Preview %r>' % 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 '<Comment %r>' % self.id# 电影收藏
    class MovCollection(db.Model):__tablename__ = 'movcollec'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 '<MovCollection %r>' % self.id# 权限
    class Auth(db.Model):__tablename__ = 'auth'id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(255), unique=True)  # 名称url = db.Column(db.String(100), unique=True)addtime = db.Column(db.DateTime, index=True, default=datetime.now)def __repr__(self):return '<Auth %r>' % self.name# 角色
    class Role(db.Model):__tablename__ = 'role'id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(255), unique=True)  # 名称auths = db.Column(db.String(100))addtime = db.Column(db.DateTime, index=True, default=datetime.now)admin = db.relationship('Admin', backref='role') # 关联管理员def __repr__(self):return '<Role %r>' % self.name
    # 什么关系呢?# 管理员
    class Admin(db.Model):__tablename__ = 'admin'id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(255), unique=True)  # 名称pwd = db.Column(db.String(300)) # 这里应该是byte为单位,设计的时候就给够,如果用hash生成至少255以上# alter table admin modify column pwd varchar(300);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)adminlog = db.relationship('AdminLog', backref='admin') # 关联管理员日志operatelog = db.relationship('OperateLog', backref='admin') # 关联操作日志def __repr__(self):return '<Role %r>' % 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))  # 登录IPaddtime = db.Column(db.DateTime, index=True, default=datetime.now)def __repr__(self):return '<Role %r>' % self.id# 操作日志
    class OperateLog(db.Model):__tablename__ = 'operatelog'id = db.Column(db.Integer, primary_key=True)admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))ip = db.Column(db.String(100))  # 登录IPreason = db.Column(db.String(500))  # 操作原因addtime = db.Column(db.DateTime, index=True, default=datetime.now)   # 这个index的具体作业是?def __repr__(self):return '<Role %r>' % self.id
    
    • 注意有些字段的长度要给够,这是设计阶段的问题,后期不建议修改!
  • 在MySQL中生成数据表,并演示插入操作
    if __name__ == '__main__':# 根据模型生成数据表# db.create_all() # desc admin 查看表# 插入数据"""role = Role(name = '炒鸡管理员',auths = '')db.session.add(role)db.session.commit()"""from werkzeug.security import generate_password_hashadmin = Admin(name = 'Allen',pwd=generate_password_hash('allen'),  # 密码就是roy,hash加密is_super = 0,role_id = 1)db.session.add(admin)db.session.commit()
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_826680.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flask视频网站(前端)

文章目录前端界面前台电影列表404后台小结前端界面 前端的搭建目前水平只能靠模板了 在templates中新建admin/home 前台 搭建顶部和底部&#xff0c;新建 home.html 这部分是所有页面都要用到的&#xff0c;后面的模板继承也是基于此&#xff0c;用block增加内容&#xff01…

flask视频网站(后台管理)

文章目录简介管理员登录标签管理电影管理电影预告管理会员管理评论管理电影收藏管理员密码修改日志管理操作日志管理员登录日志会员登录日志小结简介 这一部分要实现具体的后台管理逻辑基本逻辑如下&#xff1a; 管理员登录 将之前models中数据库的认证部分移动到app初始化…

flask视频网站(权限控制)

文章目录AuthRoleAdmin权限控制Auth 基于角色的访问权限控制 有的管理员只能访问日志&#xff0c;而有的能访问会员列表&#xff0c;有的管理电影这部分还属于admin 从创建表单模型开始&#xff0c;别着急class AuthForm(FlaskForm):"""访问权限控制"&quo…

ASP.NET Core 网站在Docker中运行

Docker作为新一代的虚拟化方式&#xff0c;未来肯定会得到广泛的应用&#xff0c;传统虚拟机的部署方式要保证开发环境、测试环境、UAT环境、生产环境的依赖一致性&#xff0c;需要大量的运维人力&#xff0c;使用Docker我们可以实现一次部署&#xff0c;到处运行。 本文介绍如…

给你介绍一个假的苹果网站,能肉眼看出来算我输!

这或许是用肉眼最难分辨的钓鱼网站&#xff0c;没有之一&#xff0c;不信你试试&#xff0c;能看出端倪吗&#xff1f; 网站的 URL 地址显示的是苹果官网&#xff0c;网址旁边是安全字样和绿色小锁&#xff0c;表示网站信息基于 https 加密传输&#xff0c;完全没什么问题&…

新手如何掌握制作和提交网站地图?

新手如何掌握制作和提交网站地图?网站地图作为根据网站的结构&#xff0c;框架&#xff0c;内容生成的导航网页文件。大多数人都知道网站地图对于提高用户体验有好处&#xff1a;它们为网站访问者指明方向&#xff0c;并帮助迷失的访问者找到他们想看的页面。那么什么是网站地…

006-网站统计中的数据收集原理及实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。本文将简要分析这种数据收集的原理&#xf…

漫谈聚类--网站

http://blog.pluskid.org/?page_id78 转载于:https://www.cnblogs.com/lm3306/p/9347665.html

json在线解析及格式化验证网站

2019独角兽企业重金招聘Python工程师标准>>> https://www.json.cn/ 转载于:https://my.oschina.net/u/3766116/blog/1861799

成都SEO网站优化与新媒体流量互通_成都辰星建站

为什么80%的码农都做不了架构师&#xff1f;>>> 成都SEO企业网站优化流量来源途径与互联网新媒体列表及流量互通实施方案,新媒体运营在当下的互联网流量运营方式占据着举足轻重的作用,企业网站流量导入外链建设已经逐渐削弱,星的流量运营导入方式已经诞生&#xff…

电商网站架构探索|SOA分布式架构详解

目前很多的企业都有自己的电商网站&#xff0c;但随着业务量的增长&#xff0c;并发量高了。由于平台架构的一些不足&#xff0c;会导致一系列严重的问题&#xff0c;电子商务平台的安全性&#xff0c;承受能力也经受着严峻的考验&#xff0c;而市面上绝大多数的电商网站是业务…

百度关键词模拟发包php程序,PHP可视化百度小程序平台微信狗源码OEM招商加盟版(多套网站风格模板+一键搭建)...

【温馨提示】源码包解压密码&#xff1a;www.youhutong.com资源描述PHP可视化百度小程序平台微信狗源码OEM招商加盟版(多套网站风格模板一键搭建)源码介绍&#xff1a;它拥有以下几个特点&#xff1a;1、系统终身使用&#xff0c;可以生成无数小程序&#xff1b;2、自带多种行业…

log4j mysql 详细日志_log4j将日志存储到数据库_太平洋学习网|一个最全的javaweb,js,css,html5,csdn,android,linux的学习网站。...

log4j是javaEE日志输出文件&#xff0c;通常情况下我们都是把log日志输出到指定的日志文件中&#xff0c;在这儿我们使用log4j将日志存储到mysql&#xff0c;oracle数据库表中&#xff0c;使用log4j前必须引入log4j.jar 和commons-logging.jar这两个jar包。一&#xff1a;配置l…

获取手机号_网站获取手机号的方法

很多人疑惑网站和app中的手机电话号码数据是怎么抓取的&#xff0c;是如何实现的&#xff0c;我在这里说下。一、数据的来源现在数据的来源有很多种&#xff0c;我给大家说下常见的几种数据来源方式和抓取方式。1、运营商数据&#xff0c;这种来源方式的话是运营商会有一个http…

WebMatrixRazor建站系列之WebMatrix介绍

WebMatrix介绍 WebMatrix是微软开发的一个免费的&#xff0c;轻量级Web开发工具。提供了一种简单的方式让我们创建一个站点。它包括IIS Express&#xff08;Web服务器&#xff09;&#xff0c;ASP.NET&#xff08;Web框架&#xff09;&#xff0c;和SQL Server Compact&#xf…

如何扫描网站的php文件在哪里,PHP实现的网站目录扫描索引工具

代码很简单&#xff0c;这里就不多废话了&#xff0c;本代码来至一位网友的投稿&#xff0c;经测试可用error_reporting(E_ALL & ~E_NOTICE);ignore_user_abort();set_time_limit(0);if ($_GET[act] op) {$data_url $_GET[url] . /;$hz $_GET[type];list($fw1, $fw2) e…

为您的IIS6下的网站配置Rewrite伪静态组件

首先我们下载Rewrite伪静态组件到服务器&#xff0c;点击下载&#xff0c;然后解压到D:\Rewrite下&#xff0c;解压后如下图&#xff1a; 温馨提示&#xff1a;ReWrite组件所在目录要有Users或者Everyone默认访问权限。您可以点击该目录右键&#xff0c;属性&#xff0c;安全&a…

超实用的54套ASP网站设计源码

2019独角兽企业重金招聘Python工程师标准>>> ASP是一种服务器端脚本编写环境&#xff0c;可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容。以下是则会54套ASP网站设计源码…

网站相关技术探究keepalive_timeout:

网站相关技术探究keepalive设多少&#xff1a; /proc/$PID/fd/$number0:标准输入 1:标准输出2:标准错误Test:[rootKTQT ~]# ll /proc/12857/fdtotal 0 lrwx------ 1 root root 64 Apr 4 17:49 0 -> /dev/nulllrwx------ 1 root root 64 Apr 4 17:49 1 -> /dev/nulllrwx…

Google的网站统计、分析系统

http://www.google.com/analytics/功能全&#xff0c;比较酷&#xff01;转载于:https://www.cnblogs.com/huobazi/archive/2005/11/16/277830.html