Flask项目-电影管理系统-mysql数据库的连接使用以及登录界面的搭建
Flask项目-电影管理系统-mysql数据库的连接使用以及登录界面的搭建 本文主要详解了使用mysql连接pycharm数据库,利用Flask架构搭建电影管理系统登录界面的方法流程。本项目涉及的完整代码均已上传,含详细注释,供读者学习和参考![提取码:wyfb]
文章目录
- Flask项目-电影管理系统-mysql数据库的连接使用以及登录界面的搭建
- 1.movie数据库的连接与缓存机制
- 1.MySQL数据库中 新建movie数据库,导入movie.sql文件进行数据库复原。
- 2.在app项目文件夹中的_ init _.py文件,设置连接数据库参数。
- 3.导入和注册蓝图(后台管理系统蓝图)。
- 4.新建数据库连接。
- 2.编写数据库的模型层(映射文件)
- 1.编写admin映射类
- 2.编写管理员的登录日志adminlog映射类
- 3.编写管理员的操作日志Oplog映射类
- 3.前端登录界面的请求接收和处理
- 1.新建admin文件夹中views.py文件,接收前端发送的请求并处理。
- 2.新建admin文件夹中forms.py文件,数据库表格映射进行Loginform表单验证。
- 4.编写登录,登录成功跳转页面.html
- 1.编写登录页面login.html,如下:
- 2.编写登录成功跳转至index.html,如下:
- 5.效果展示
1.movie数据库的连接与缓存机制 1.MySQL数据库中 新建movie数据库,导入movie.sql文件进行数据库复原。
2.在app项目文件夹中的_ init _.py文件,设置连接数据库参数。
importos
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_redis import FlaskRedis__authoer__="star"# 1.设置名称
app = Flask(__name__)'''
2.数据库连接设置
'''
# 2.1 设置mysql连接参数
# mysql+pymysql==>mysql数据库+pymysql的驱动模块
# root:mysql===>用户名和密码
# 127.0.0.1:3306 ==>ip地址本机+3306端口号localhost公认的本机地址
# movie===>数据库名称
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://user:123123@127.0.0.1:3306/mov'# 2.2 设置mysql对象修改与信号发送
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True'''
3.设置项目缓存
'''
# 3.1设置缓存URL
app.config['REDIS_URL'] = 'redis://127.0.0.1:6379/0'
# 3.2 设置秘钥
app.config['SECRET_KEY'] = 'star_movie'
# 3.3 设置上传目录
# os.path.join ===>目录拼接
# os.path.abspath===>绝对路径 E:\PycharmProjects\SFMovie
# os.path.dirname(__file__)===>E:\PycharmProjects\SFMovie\static\uploads\
# 后端上传目录
app.config['UP_DIR'] = os.path.join(os.path.abspath(os.path.dirname(__file__)),"static/uploads/")
# 前端上传 目录
app.config['FC_DIR'] = os.path.join(os.path.abspath(os.path.dirname(__file__)),"static/uploads/users")# 4.设置DEBUG模式
app.debug = False#5.数据库连接
# 5.1 获取连接通道
db = SQLAlchemy(app)# 6.设置缓存机制
rd = FlaskRedis(app)
这里需要注意的有两个地方:
a.数据库的设置方式,用户名,密码,数据库名称应对应准确;127.0.0.1是本机服务器,若想使用同一局域网的其他主机的数据库可输入对应的ip即可。
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://user:123123@127.0.0.1:3306/mov'
b.设置debug模式,如果出现500等无法显示情况,将app.debug设置为True,重启计算机后,可在浏览器中看到Trace_back的报错情况进行调试。
app.debug = False
3.导入和注册蓝图(后台管理系统蓝图)。
在_ init _.py中,继续添加以下代码:
'''
7.蓝图 提高编程效率
'''
# 7.1 设置导入蓝图
from app.admin import admin as admin_blueprint# 7.2 注册蓝图
app.register_blueprint(admin_blueprint)
4.新建数据库连接。
【Flask项目-电影管理系统-mysql数据库的连接使用以及登录界面的搭建】
文章图片
连接方法,参考博客:https://blog.csdn.net/sinat_40770656/article/details/107384070
2.编写数据库的模型层(映射文件) 该部分代码在app/models.py文件中编写完成。
1.编写admin映射类
admin表的属性值如下:
文章图片
编写代码如下:
from app import db
from datetime import datetime'''
1.admin表
'''
# 管理员表
class Admin(db.Model):
# 1.设置表格名称
__tablename__='admin'
# 2.用户是否存在
__table_args__ = {'useexisting':True}
# 3.设置映射
# 编号
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)
# 管理员角色
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# 检查密码是否正确
def check_pwd(self,pwd):
return self.pwd == pwd
2.编写管理员的登录日志adminlog映射类
'''
2.管理员的登录日志 adminlog
'''
class Adminlog(db.Model):
# 1.设置表名称
__tablename__ = 'adminlog'
# 2.判断表是否存在
__table_args__ = {'useexisting':True}
# 3.设置字段信息
id = db.Column(db.Integer,primary_key=True)
admin_id = db.Column(db.Integer,db.ForeignKey('admin.id'))
ip = db.Column(db.String(100))
addtime = db.Column(db.DateTime,index=True,default=datetime.now)
# 4.设置 返回表信息
def __repr__(self):
return ""%self.id
3.编写管理员的操作日志Oplog映射类
'''
3.管理员的操作日志 Oplog
'''
class Oplog(db.Model):
# 1.表名称
__tablename__ = 'oplog'
# 2.判断表是否存在
__table_args__ = {'useexisting':True}
# 3.表信息
id = db.Column(db.Integer,primary_key=True)
admin_id = db.Column(db.Integer,db.ForeignKey('admin.id'))
ip = db.Column(db.String(100))
# 操作原因
reason = db.Column(db.String(600))
# 添加时间
addTime = db.Column(db.DateTime,index=True,default=datetime.now)def __repr__(self):
return ""%self.id
3.前端登录界面的请求接收和处理 1.新建admin文件夹中views.py文件,接收前端发送的请求并处理。
from flask import render_template,flash,redirect,url_for,session,request
from . import admin
from .forms import LoginForm,TagForm
from app.models import Admin,Adminlog,Tag
from app import db'''
1.后台系统请求设置
GET=>返回的是网页login.html
POST===>表单提交判断用户名存在密码一致'''
@admin.route('/login/',methods=['GET','POST'])
def login():# 1.设置表单form变量
form = LoginForm()
# 2.判断是否提交按钮登录按钮被按下
if form.validate_on_submit():
# 3.获取表单数据
userData = https://www.it610.com/article/form.data
# 4.判断账号是否一致Admin===>Models文件中Admin表
admin = Admin.query.filter_by(name=userData['account']).first()# 5.判断用户密码与数据库密码是否一致
if not admin.check_pwd(userData['pwd']):
# 通过flash发送错误信息
flash('密码错误','err')
# 重定向请求
return redirect(url_for('admin.login'))# 6.存储session
session['admin'] = userData['account']
session['admin_id'] = admin.id
# 7.设置管理员登录日志
adminlog = Adminlog(
admin_id = admin.id,
ip = request.remote_addr
)
# 8.添加登录日志insert into
db.session.add(adminlog)
db.session.commit()
# 9.重定向
# 当需要获取前端页面表单传过来的id值的时候,我们就需要request.args.get
# 而不能用request.form
returnredirect(request.args.get('next') or url_for("admin.index") )return render_template('admin/login.html',form=form)
2.新建admin文件夹中forms.py文件,数据库表格映射进行Loginform表单验证。
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, FileField, TextAreaField
from wtforms.validators import DataRequired, ValidationError
# 导入数据库映射文件Admin是表格名称 models是数据库所有表格的映射
from app.models import Admin'''
1.管理员登录表单映射
'''class LoginForm(FlaskForm):
# validators:验证器
# description:描述
# render_kw:渲染属性
# 账号信息处理
account = StringField(
label='账号',
validators=[DataRequired('账号不能为空')],
description='管理员账号',
render_kw={'class': 'form-control', 'placeholder': '请输入管理员账号'}
)# 密码
pwd = PasswordField(
label='密码',
validators=[DataRequired('密码不能为空')],
description='管理员密码',
render_kw={'class': 'form-control', 'placeholder': '请输入管理员密码'}
)
# 登录按钮
submit = SubmitField(
label='登录',
render_kw={'class': 'btn btn-primary btn-block btn-flat'}
)# 当我们登录的时候在数据库没有查找用户信息
def validat_account(self, field):
# 获取验证数据信息
account = field.data
# 查找统计数据库中的用户名数量
admin = Admin.query.filter_by(name=account).count()
# 判断是否为0
if admin == 0:
raise ValidationError('账号不存在')
这里需要注意的是:
a.Admin是表格名称,models是数据库所有表格的映射。
b.原始的管理员名称是admin,密码是admin。
4.编写登录,登录成功跳转页面.html 1.编写登录页面login.html,如下:
后台| 电影管理系统 - 锐客网
{% for msg in get_flashed_messages(category_filter=['err']) %}
{{ msg }}
{% endfor %}{% for msg in get_flashed_messages(category_filter=['ok']) %}
{{ msg }}
{% endfor %}
="{{ url_for('static',filename='admin/plugins/jQuery/jQuery-2.2.0.min.js') }}">
="{{ url_for('static',filename='admin/bootstrap/js/bootstrap.js') }}">
="{{ url_for('static',filename='admin/plugins/iCheck/icheck.js') }}">
2.编写登录成功跳转至index.html,如下:
{% extends 'admin/admin.html' %}{% block content %}class="content-header">
电影管理系统
内存使用率
系统设置
{% endblock %}{% block js %}
src="https://www.it610.com/article/{{ url_for('static',filename='js/echarts.min.js') }}">
>
var myChart = echarts.init(document.getElementById('meminfo'));
option = {
backgroundColor:'white',
tooltip:{formatter:"{a}
{b} : {c}"},
toolbox:{feature:{
restore:{},
saveAsImage:{}}},
series:[
{name:'内存使用率',
type:'gauge',
detail:{
formatter: '{value}%'
},
data:[{
value:50,
name:'内存使用率'}]
}]};
setInterval(function () {
option.series[0].data[0].value = https://www.it610.com/article/(Math.random()*100).toFixed(2)-0;
maChart.setOption(option,true);
},2000)
>
$(document).ready(function () {
$('#g-1').addClass('active');
$('#g-1-1').addClass('active');
});
{% endblock %}
class="content" id="showcontent">
5.效果展示
文章图片
推荐阅读
- 新年第一部电影,一本满足
- 杀死一只知更鸟
- 过年瞎想
- 17|17 关山松 第二课作业#公众号项目# D20
- RxJava|RxJava 在Android项目中的使用(一)
- 电影|电影 |《逆光飞翔》
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- 观我不是药神电影有感
- 靠QQ月入上万灰色暴利偏门的项目
- 夜场