轮播收藏
JSON数据存入数据
import json
import pymysql
#获取json里的轮播图片数据
def read_banners():
images = []
with open("getBanner.json") as banners_file:
banners_json = banners_file.read()
print(banners_json)
banners_data = json.loads(banners_json).get("data")
# print(banners_data)
for banner in banners_data:
image = banner.get("image")
images.append(image)
return images
def insert_db(images):
#连接数据库
mysql_client = pymysql.Connect(host="localhost", port=3306, user="root", password="*******", charset="utf8", database="FlaskWork")
#开启事务
mysql_client.begin()
#创建游标
cursor = mysql_client.cursor()
for image in images:
cursor.execute('INSERT INTO banner(image) VALUES ("%s");' % image)
#提交到轮播图表里
mysql_client.commit()
if __name__ == '__main__':
images = read_banners()
print(images)
insert_db(images)
import json
import pymysql
#电影数据的插入
def read_movies():
with open("getMovies.json") as movies_file:
movies_json = movies_file.read()
# print(movies_json)
movies_data = json.loads(movies_json).get("data")
# print(movies_data)
return movies_data
def insert_db(movies):
mysql_client = pymysql.Connect(host="localhost", port=3306, user="root", password="", charset="utf8", database="FlaskWork")
mysql_client.begin()
cursor = mysql_client.cursor()
for movie in movies:
image = movie.get("image")
title = movie.get("title")
duration = movie.get("duration")
postid = movie.get("postid")
print(image, title, duration, postid)
cursor.execute('INSERT INTO movie(image, title, duration, postid) VALUES ("%s", "%s", %d, %d);' % (image, title, int(duration), int(postid)))
mysql_client.commit()
if __name__ == '__main__':
movies = read_movies()
print(movies)
insert_db(movies)
模型的创建
将自增字段id创建成父类抽象模型
from FlaskWork.ext import db
class BaseModel(db.Model):
__abstract__ = True #抽象模型不产生数据库映射
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
#重写save方法
def save(self):
try:
db.session.add(self)
db.session.commit()
except Exception as e:
print(e)
return False
return True
#重写删除
def delete(self):
try:
db.session.delete(self)
db.session.commit()
except Exception as e:
print(e)
return False
return True
用户模型
class User(BaseModel):
name = db.Column(db.String(32), unique=True)
password = db.Column(db.String(256))
email = db.Column(db.String(128), unique=True)
icon = db.Column(db.String(256), nullable=True)
def check_password(self, password):
return self.password == password
展示界面模型
#轮播图
class Banner(BaseModel):
image = db.Column(db.String(256))
#电影
class Movie(BaseModel):
postid = db.Column(db.Integer)
title = db.Column(db.String(128))
image = db.Column(db.String(256))
duration = db.Column(db.Integer)
#电影和用户的收藏关系表
class Collect(BaseModel):
movie_id = db.Column(db.Integer, db.ForeignKey(Movie.id))
user_id = db.Column(db.Integer, db.ForeignKey(User.id))
视图层函数
首页展示
@movies_blue.route("/home/")
def home():
username = session.get("username")
icon = session.get("icon")
print(username, icon)
banners = Banner.query.all()
movies = Movie.query.all()
return render_template("home_logined.html", username=username, icon=icon, banners=banners, movies=movies)
ajax实现收藏功能
#html页面
<ul class="nav nav-tabs child-nav">
<li role="presentation" class="active">
<a href="#">最新推荐</a>
</li>
#判断用户存在才有收藏功能
{% if username %}
<li role="presentation">
<a href="#">收藏</a>
</li>
{% endif %}
</ul>
#通过dom操作得到movieid 给div添加点击事件
<div class="movie-like" movie_id="{{ movie.id }}">
<span class="glyphicon glyphicon-heart" style="color: black;"></span>
<span>200</span>
</div>
ajax请求
$(".movie-like").click(function () {
var $movie_like = $(this);
var movie_id = $movie_like.attr("movie_id");
$.post("/movies/collect/",{"movie_id": movie_id}, function (data) {
console.log(data);
#900表示未登录 ,跳转登录界面
if(data["status"] === 900){
window.open("/users/login/", target="_self");
}else if(data["status"] === 902){
$movie_like.children().css("color", "red");
}
}, "json")
})
视图层处理
@movies_blue.route("/collect/", methods=["POST"])
def collect():
#请求数据中获取movie_id和username
movie_id = request.form.get("movie_id")
username = session.get("username")
if not username:
data = {
"msg": "not login",
"status": 900
}
return jsonify(data)
#查找用户是否已经收藏该电影
user_id = User.query.filter(User.name.__eq__(username)).first().id
collects = Collect.query.filter(Collect.user_id.__eq__(user_id)).filter(Collect.movie_id.__eq__(movie_id)).all()
if collects:
data = {
"msg": "collected",
"status": 901
}
return jsonify(data)
#未收藏就创建收藏对象保存到表里
collect = Collect(movie_id=movie_id, user_id=user_id)
if collect.save():
data = {
"msg": "collect success",
"status": 902
}
return jsonify(data)
else:
data = {
"msg": "collect fail",
"status": 903
}
return jsonify(data)
头像的存储
@users_blue.route("/register/", methods=["GET", "POST"])
def register():
if request.method == "GET":
return render_template("register.html")
elif request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
email = request.form.get("email")
#获取头像文件
icon = request.files.get("icon")
path = None
if icon:
try:
#获取文件的扩展名
ext = "." + icon.filename.split(".")[-1]
except Exception as e:
#默认jpg格式
ext = ".jpg"
# path 应该是icon进行了存储操作产生的地址
path = "/static/icons/" + username + ext
save_path = "绝对路径" + username + ext
#存储文件的地址
icon.save(save_path)
# 文件提交使用enctype属性
<form method="post" action="{{ url_for("users_blue.register") }}" enctype="multipart/form-data">
```