基于 flask 框架的模拟instagram 图片分享网站的开发

1. 前言

我们的目标是模拟instagram 制作一个图片分享的网站, 我们这里选用的是 flask 框架, 这个框架小巧, 易于扩展, 简单易用

2. 基本思路

  1. 利用sqlalchemy 构建 数据库 orm, 建立 user, image, comment 对象, 存放图片url, 等各种相关信息
  2. 利用 jinja 的模板功能, 提供便利的前端显示

3. 基本流程

  1. 构建flask 项目框架, 如下图所示

    • static 用来放置基本的图片, css, js 等前端文件
    • templates 用来放置需要渲染的网页模板
    • models 用来构建数据库表 的 ORM 模型
    • views 用来解析网页路径, 提供一个网页接口
    • manage 用来提供一些基本的配置指令
    • runserver 用来启动服务器
    • app.conf 用来设置一些全局配置信息
      这里写图片描述
  2. 构建一个 全局的 flask 对象

    • 这个对象, 本质上, 就是这个网站
      app = Flask(__name__)
      app.jinja_env.add_extension('jinja2.ext.loopcontrols')
      app.config.from_pyfile('app.conf')
      db = SQLAlchemy(app)

    这样, flask 的相关配置就可以直接写在 app.conf 中, 比如切换底层数据库等, 非常方便

  3. 利用 sqlalchemy 构建数据库 orm 模型

    • 这里以 建立 user 表 为例
      class User(db.Model):
          id = db.Column(db.Integer, primary_key=True, autoincrement=True)
          username = db.Column(db.String(80), unique=True)
          password = db.Column(db.String(32))
          head_url = db.Column(db.String(256))  # 头像的url
          images = db.relationship('Image', backref='user', lazy = 'dynamic')
          #images = db.relationship('Image')
      
      
          def __init__(self, username, password):
              self.username = username
              self.password = password
              self.head_url = u'static/yurisa/' + unicode(random.randint(0, 100)) + u'.jpg'
      
          def __repr__(self):
              return '<User %d, name = %s, password = %s, head_url = %s' % (self.id, self.username, self.password, self.head_url)

    这里面, 需要解释一下 relationship, 这里面通过 images 建立起 User 表和Image 表之间的联系, 可以方便的从User 表来访问 Image 表, 当然, 由于还建立了 backref 关系, 也支持 从 Image 表 访问 User 表信息。

    • 类似的可以建立 Comment 表 和 Image 表
  4. 建立 浏览器访问路由

    @app.route('/')
    def index():
        images = Image.query.order_by('id desc').limit(10).all()
        return render_template('index.html', images = images)

    这里面需要注意的是, 他使用了 render_template 来渲染 我们预先设定的 index.html 模板, 支持 后端的数据 images 的传入

4. 遇到的坑

  1. template not found
    这里写图片描述
    这个问题, 主要是我们 的static 和 templates 的文件夹目录放错位置了, 应该在 application 下面

  2. python version 2.7 is required, which is not found in the registry
    这里写图片描述
    这个主要是我们安装了 64 bit 的python 所导致的, 解决方法:
    http://jinbitou.net/2015/10/17/563.html

  3. dll load failed
    这里写图片描述
    这个原因还是在于, 我们安装的python 是 64bit 的, 而从官网下载的 mysqldb 是 32bit 的, 不兼容, 解决方法:
    http://blog.csdn.net/seven_zhao/article/details/16945043

  4. unknown database
    这里写图片描述
    这个原因主要是, mysql 中没有对应的 instagram 数据库, 预先建立一个就好了

5. 初步效果

图片详情页
这里写图片描述
主页
这里写图片描述
个人信息页
这里写图片描述

6. 项目地址

https://code.csdn.net/zhyh1435589631/instagram_simulation/tree/master

7. 结尾

我们的这个项目现在写的还是比较简单, 只是实现了一些最基本的功能(本质上, 只是读取数据库里面的相关内容), 后面将逐步添加一些登陆,注册等功能, 来完善这个项目

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值