Flask实现Json数据存库和收藏功能

轮播收藏

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">
 ```
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值