Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用Flask搭建微电影视频网站(二):项目优化与模型设计

利用Flask搭建微电影视频网站(二):项目优化与模型设计

原创
作者头像
啃饼思录
发布于 2018-09-29 12:29:06
发布于 2018-09-29 12:29:06
2.3K0
举报

关于博主

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

代码语言:txt
AI代码解释
复制
                                      微信公众号:  啃饼思录
代码语言:txt
AI代码解释
复制
                                    QQ: 2810706745(啃饼小白)

写在前面

从本篇笔记开始,我们正式进入flask的编程世界,话不多说,我们先来创建我们的第一个flask程序,然后进行项目的优化以及模型设计。

本篇笔记对应上传的仓库为:https://github.com/licheetools/movie对应第二篇。

第一个flask程序

打开pycharm按照图示创建flask项目:
点击确定之后就成了这样:

你会发现上面2个文件static和templates竟然都是空的,也就说只有movie.py文件才有,而且只有寥寥的7行代码。我给你看一下Django创建项目之后的页面:

看到没有,flask的确是轻巧,巧到刚开始只有2个空文件和一个7行代码的py文件。而纵观Django,刚开始就有那些看不懂的而且代码挺多的py文件,所以还是那句话,学好flask需要花费一定的时间。我们继续回到flask页面:点击上面的运行按钮,提示你在浏览器输入:http://127.0.0.1:5000/,flask的默认端口号为5000,Django的端口号为8000,要注意区别!你会发现页面只有Hello World!这个单词而已!!!

项目优化与模型设计

我们这个微电影网站包括:前台模块(home)后台模块(admin)


其中前台模块(home)包括:

数据模型:models.py

表单处理: home/forms.py

模板目录: templates/home

静态目录:static



而后台模块(admin)也同样包括:

数据模型:models.py

表单处理: admin/forms.py

模板目录: templates/admin

静态目录:static


数据模型是共用的,而表单提交和模板都是独立的,下面看一下前后台的目录分析:
按照上述图片所示,新建文件树:

使用flask的蓝图(Blueprint)来规划项目的结构

1、什么是蓝图?

它是一个应用中或跨应用制作应用组件和支持通用的模式。

2、蓝图的作用?

将不同的功能模块化;构建大型应用;优化项目结构;增强可读性,易于维护。

下面我们将对上面的3个目录进行分开介绍,由于前后台的目录结构很类似,这里我以app/admin为例进行说明,大家跟紧我的节奏即可。

1、定义蓝图(app/admin/--init--.py)

代码语言:txt
AI代码解释
复制
from flask import Blueprint
admin = Blueprint("admin", __name__)
import app.admin.views

2、注册蓝图(app/--init--.py)

代码语言:txt
AI代码解释
复制
from flask import Flask

app = Flask(__name__)
app.debug = True

from app.admin import admin as admin_blueprint

app.register_blueprint(admin_blueprint, url_prefix="/admin")

3、调用蓝图(app/admin/views.py)

代码语言:txt
AI代码解释
复制
from . import admin


@admin.route("/")
def index():
    return "<h1 style='color:blue'>This is admin</h1>"

而在app/home里面同样是这样的:

1、定义蓝图(app/home/--init--.py)

代码语言:txt
AI代码解释
复制
from flask import Blueprint
home = Blueprint("home", __name__)
import app.home.views

2、注册蓝图(app/--init--.py)

代码语言:txt
AI代码解释
复制
from flask import Flask

app = Flask(__name__)
app.debug = True

from app.home import admin as home_blueprint

app.register_blueprint(home_blueprint) # 这里url可以不写

3、调用蓝图(app/home/views.py)

代码语言:txt
AI代码解释
复制
from . import admin


@home.route("/")
def index():
    return "<h1 style='color:red'>This is home</h1>"

在完成上述代码之后,最后一步书写manage.py文件,开始启动app。

代码语言:txt
AI代码解释
复制
from app import app
if __name__ == '__main__':
    app.run()

在浏览器地址栏中输入:http://127.0.0.1:5000,则显示红色的This is home;而输入http://127.0.0.1:5000/admin/,则显示蓝色的This is admin.

会员及会员登录日志数据模型设计

1、安装数据库连接依赖包

代码语言:txt
AI代码解释
复制
pip install flask-sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple

关于sqlalchmey的介绍,请关注我的另外一个专题《Python3操作三大数据库》这里面就会有详细的介绍,这里我就不细说了,你只要记住它是一个企业级的ORM对象关系映射框架就够了。

2、定义mysql数据库连接:

打开models.py文件,我们新建下面的代码:

代码语言:txt
AI代码解释
复制
from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app = from flask import Flask 
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URL'] = "mysql://账号:密码@ip地址/movie"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] =True
db = SQLAlchemy(app)

大家可以点击flask-sqlalchemy,来了解更多的信息。

3、定义会员数据模型:

继续在models.py文件里添加代码:

代码语言:txt
AI代码解释
复制
# 定义会员数据模型
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(11), unique=True)  # 电话号码
    info = db.Column(db.Text)  # 个性简介
    face = db.Column(db.String(255), unique=True)  # 头像
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间
    uuid = db.Column(db.String(255), unique=True)  # 唯一标志符

    def __repr__(self):
        return '<User %r>' % self.name

大家对此内容不了解可以点击声明模型

4、会员登录日志数据模型:

代码语言:txt
AI代码解释
复制
# 会员登录日志
class UserLog(db.Model):
    __tablename__ = "userlog"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 所属会员
    ip = db.Column(db.String(100))  # 登录IP
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<UserLog %r>' % self.id

注意由于此处采用了外键,所以需要在User函数里面新增关系:

代码语言:txt
AI代码解释
复制
  userlogs = db.relationship('userlog', backref='user')  # 会员日志外键关系

注意到没有,这里和Django中字段的定义是不一样的,Django不需要在关系外键里面增加外键关系,但是Flask却是必须的,要注意这一点。

总结一下,models.py文件的代码为:

代码语言:txt
AI代码解释
复制
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import datetime

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:root@127.0.0.5/movie"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS	"] = True
db = 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(11), unique=True)  # 电话号码
    info = db.Column(db.Text)  # 个性简介
    face = db.Column(db.String(255), unique=True)  # 头像
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间
    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'))  # 所属会员
    ip = db.Column(db.String(100))  # 登录IP
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<UserLog %r>' % self.id

5、标签数据模型设计

代码语言:txt
AI代码解释
复制
# 定义标签数据模型
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.utcnow)  # 添加时间
    movies = db.relationship('Movie', backref='tag')  # 电影外键关系关联

    def __repr__(self):
        return '<Tag %r>' % self.name

其中,relationship('Movie', backref='tag')里面,Movie为所关联的类名,backref为当前的表名!

6、电影数据模型设计

代码语言:txt
AI代码解释
复制
# 定义电影数据模型
class 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(255), 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(255))  # 地区
    release_time = db.Column(db.Date)  # 发布时间
    length = db.Column(db.String(100))  # 电影长度
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<Movie %r>' % self.title

7、上映预告数据模型设计

代码语言:txt
AI代码解释
复制
# 定义上映预告数据模型
class 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.utcnow)  # 添加时间

    def __repr__(self):
        return '<Preview %r>' % self.title

评论及收藏电影数据模型设计

1、定义评论数据模型:

代码语言:txt
AI代码解释
复制
# 定义评论数据模型
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.utcnow)  # 添加时间

    def __repr__(self):
        return '<Comment %r>' % self.id

2、定义收藏电影数据模型:

代码语言:txt
AI代码解释
复制
# 定义收藏电影数据模型
class MovieCol(db.Model):
    __tablename__ = "moviecol"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    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.utcnow)  # 最近登录时间

    def __repr__(self):
        return '<MovieCol %r>' % self.id

权限及角色数据模型设计

1、定义权限数据模型:

代码语言:txt
AI代码解释
复制
# 定义权限数据模型
class Auth(db.Model):
    __tablename__ = "auth"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    name = db.Column(db.String(100), unique=True)  # 名称
    url = db.Column(db.String(255), unique=True)  # 电影地址
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<Auth %r>' % self.name

2、定义角色数据模型:

代码语言:txt
AI代码解释
复制
# 定义角色数据模型
class Role(db.Model):
    __tablename__ = "role"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    name = db.Column(db.String(100), unique=True)  # 名称
    auths = db.Column(db.String(600)) # 权限列表
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<Role %r>' % self.name

管理员、管理员登陆日志、操作日志数据模型设计

1、定义管理员数据模型

代码语言:txt
AI代码解释
复制
# 定义管理员数据模型
class Admin(db.Model):
    __tablename__ = "admin"
    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)  # 是否为超级管理员,0为超级管理员
    role_id = db.Column(db.Integer, db.ForeignKey('role.id'))  # 所属角色
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<Admin %r>' % self.name

2、定义管理员登陆日志数据模型

代码语言:txt
AI代码解释
复制
# 定义管理员登陆日志数据模型
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))  # 登录IP
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<AdminLog %r>' % self.id

3、定义操作日志数据模型

代码语言:txt
AI代码解释
复制
# 定义操作日志数据模型
class OpLog(db.Model):
    __tablename__ = "oplog"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))  # 所属管理员
    ip = db.Column(db.String(100))  # 登录IP
    reason = db.Column(db.String(600))  # 操作原因
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<OpLog %r>' % self.id

考虑到部分关系只有全部字段定义完成以后才能开始,所以这里贴一下models.py的全部代码:

代码语言:txt
AI代码解释
复制
#!/user/bin/python
# -*- coding:utf-8 -*-
# @Time: 2018/3/29 21:20
# @Author: Envse
# @File: models.py


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://账号:密码@ip地址/movie"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS	"] = True
db = 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(11), unique=True)  # 电话号码
    info = db.Column(db.Text)  # 个性简介
    face = db.Column(db.String(255), unique=True)  # 头像
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间
    uuid = db.Column(db.String(255), unique=True)  # 唯一标志符
    userlogs = db.relationship('UserLog', backref='user')  # 会员日志外键关系
    comments = db.relationship('Comment', backref='user')  # 评论外键关系关联
    moviecols = db.relationship('MovieCol', 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'))  # 所属会员
    ip = db.Column(db.String(100))  # 登录IP
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    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.utcnow)  # 添加时间
    movies = db.relationship('Movie', backref='tag')  # 电影外键关系关联

    def __repr__(self):
        return '<Tag %r>' % self.name


# 定义电影数据模型
class 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(255), 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(255))  # 地区
    release_time = db.Column(db.Date)  # 发布时间
    length = db.Column(db.String(100))  # 电影长度
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间
    comments = db.relationship('Comment', backref='movie')  # 电影评论外键关联
    movieclos = db.relationship('MovieCol', backref='movie')  # 电影收藏外键关联

    def __repr__(self):
        return '<Movie %r>' % self.title


# 定义上映预告数据模型
class 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.utcnow)  # 添加时间

    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.utcnow)  # 添加时间

    def __repr__(self):
        return '<Comment %r>' % self.id


# 定义收藏电影数据模型
class MovieCol(db.Model):
    __tablename__ = "moviecol"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    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.utcnow)  # 最近登录时间

    def __repr__(self):
        return '<MovieCol %r>' % self.id


# 定义权限数据模型
class Auth(db.Model):
    __tablename__ = "auth"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    name = db.Column(db.String(100), unique=True)  # 名称
    url = db.Column(db.String(255), unique=True)  # 电影地址
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    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(100), unique=True)  # 名称
    auths = db.Column(db.String(600)) # 权限列表
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    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(100), unique=True)  # 管理员名称
    pwd = db.Column(db.String(100))  # 管理员密码
    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.utcnow)  # 添加时间
    adminlogs = db.relationship('AdminLog', backref='admin')  # 管理员登录日志外键关系关联
    oplogs = db.relationship('OpLog', backref='admin')  # 管理员操作日志外键关系关联

    def __repr__(self):
        return '<Admin %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))  # 登录IP
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<AdminLog %r>' % self.id


# 定义操作日志数据模型
class OpLog(db.Model):
    __tablename__ = "oplog"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))  # 所属管理员
    ip = db.Column(db.String(100))  # 登录IP
    reason = db.Column(db.String(600))  # 操作原因
    addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)  # 添加时间

    def __repr__(self):
        return '<OpLog %r>' % self.id

if __name__ == '__main__':
    db.create_all()  # 开始创建数据表

结合mysql数据库来生成数据表

1、进入到虚拟环境后,安装pymysql

代码语言:txt
AI代码解释
复制
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple

2、导入pymysql并加以使用

代码语言:txt
AI代码解释
复制
import pymysql
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://账号:密码@ip地址/movie"

3、运行models.py文件

运行models.py文件之后,你会发现出现字符编码的问题:

代码语言:txt
AI代码解释
复制
F:\Envs\movie\lib\site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 481")

因为windows系统默认使用的是GBK字符集,而我们在windows系统上使用的数据库默认也是GBK字符集,尽管我们在创建数据库的时候已经把字符集设定为utf8,但还是有问题,说明还是系统字符集影响到了我们项目的运行。但是数据库定义没问题,你输入中文是没有问题的这是mysql5.7的一个Bug,你可以忽略这个问题。

博主通过各方努力终于找到了解决问题的办法:Flask利用pymysql出现Warning:1366的解决办法

4、打开movie数据库

打开数据库,你会发现新生成了许多数据表,这与我们在models.py文件里定义的一模一样。

至此本篇关于项目优化与模型设计的介绍就到此为止了,感谢你的赏阅!

本篇笔记对应上传的仓库为:https://github.com/licheetools/movie对应第二篇。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
国产微服务网关 APISIX,有点意思,直接开锤,换掉家门口的 Nginx
APISIX 是基于 OpenResty + etcd 实现的云原生、高性能、可扩展的微服务 API 网关。它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!!
芋道源码
2020/05/19
12.4K1
国产微服务网关 APISIX,有点意思,直接开锤,换掉家门口的 Nginx
开源 API 网关的性能对比:APISIX 3.0 和 Kong 3.0
作者 | 屠正松 苏钰       责编 | 梦依丹 出品 | APISIX 技术团队投稿 云原生时代下,企业逐渐向云上迁移,越来越多的应用和服务都在进行容器化改造,服务之间的流量也开始爆发性的增长。为了能高效地管理这些规模庞大的 API,API 网关开始在技术领域大展身手。 用户除了需要 API 网关提供请求代理、熔断限流、审计监控等常规能力外,更多开始关注云原生兼容性、支撑场景的多样性,以及更好的性能及稳定性。在这样的背景下,以 Apache APISIX 和 Kong 等为代表的云原生 API 网关
博文视点Broadview
2023/04/04
1.9K0
开源 API 网关的性能对比:APISIX 3.0 和 Kong 3.0
Apache Apisix轻松打造亿级流量Api网关
APISIX API 网关提供负载均衡、动态上行、灰度发布、熔断、鉴权、可观测等丰富的流量管理功能。
架构狂人
2023/10/24
1.8K0
Apache Apisix轻松打造亿级流量Api网关
国产API 网关Apache APISIX 上手
APISIX 是一个高性能、可扩展的微服务 API 网关。它是基于 Nginx 和 etcd 来实现,和传统 API 网关相比,
冷冷
2019/10/28
1.8K0
Apache APISIX网关部署
APISIX 是一个云原生、高性能、可扩展的微服务 API 开源网关,基于OpenResty(Nginx+Lua)和etcd来实现,对比传统的API网关,具有动态路由和热插件加载的特点。系统本身自带前端,可以手动配置路由、负载均衡、限速限流、身份验证等插件,操作方便。APISIX是用Lua语言开发,语言相对简单,容易上手,同时可以按自己的需求进行系统的二次开发以及开发自己的插件。
行 者
2023/10/20
1.3K0
Apache APISIX最佳实践(二):配置详解与路由配置
我们就拿上一章节的APISIX ConfigMap配置来进行解读,APISIX的配置名为config.yaml 文件,通常位于 /usr/local/apisix/conf/config.yaml,关键配置如下:
SRE运维手记
2024/08/30
2.1K0
Apache APISIX最佳实践(二):配置详解与路由配置
APISIX介绍
Apache APISIX是Apache软件基金会下的云原生API网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。 可以使用Apache APISIX来处理传统的南北向流量,也可以处理服务间的东西向流量。 同时,它也支持作为K8s Ingress Controller来使用。 APISIX的部署架构图如下所示,包含3个部分:API Gateway负责流量转发,etcd负责配置存储,API Gateway Admin是管理人员的控制台,而且三个部分都完整支持高可用。
编程随笔
2023/10/15
4.1K0
APISIX介绍
Kubernetes (K8S) 中安装部署APISIX
Apache APISIX 是一个基于 OpenResty 和 Etcd 实现的动态、实时、高性能、可扩展的微服务 API 网关,目前已经是 Apache 顶级项目。提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B 测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等。可以使用 APISIX 来处理传统的南北流量以及服务之间的东西向流量。
王先森sec
2023/10/17
3.9K0
Kubernetes (K8S) 中安装部署APISIX
Apache Apisix初体验
Apache APISIX 是一个基于 OpenResty 和 Etcd 实现的动态、实时、高性能的 API 网关,目前已经是 Apache 的顶级项目。提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等。可以使用 APISIX 来处理传统的南北流量以及服务之间的东西向流量。
mikelLam
2022/10/31
1.2K0
Apache Apisix初体验
开源网关 Apache APISIX 认证鉴权精细化实战讲解
在当下云原生越发成熟的环境下,API 网关最核心的功能可以概括为:连接 API 消费者和 API 提供者。
我的小碗汤
2023/03/20
2.9K0
开源网关 Apache APISIX 认证鉴权精细化实战讲解
APISIX架构分析:如何动态管理Nginx集群?
开源版Nginx最为人诟病的就是不具备动态配置、远程API及集群管理的能力,而APISIX作为CNCF毕业的开源七层网关,基于etcd、Lua实现了对Nginx集群的动态管理。
陶辉
2023/10/18
1.2K0
APISIX架构分析:如何动态管理Nginx集群?
Kubernetes (K8S)中APISIX高级使用
现在当我们访问 http://whoami.boysec.cn/tls 或者 http://whoami.boysec.cn/tls/ 的时候都可以得到正常的结果,一般来说我们可能希望能够统一访问路径,比如访问 /tls 子路径的时候可以自动跳转到 /tls/ 以 Splash 结尾的路径上去。同样要实现该需求我们只需要使用一个名为 redirect 的插件即可,该插件是 URI 重定向插件,可配置的属性如下所示:
王先森sec
2023/10/16
1.7K0
Kubernetes (K8S)中APISIX高级使用
基于 Apache APISIX 的全流量 API 网关
温铭 支流科技 CEO 兼联合创始人 本文将从云原生时代的机遇和挑战说起,介绍一个全新的开源高性能云原生 API 网关——Apache APISIX,探讨如何解决云原生时代 API 网关所面临的一些痛点,最后介绍该开源项目未来的规划。 背景 云原生的机遇和挑战 很多应用和服务都在向微服务、容器化迁移,形成新的云原生时代。云原生是下一个 5-10 年的技术颠覆,重写了传统企业的技术架构,例如云原生中的 Kubernetes 颠覆了传统操作系统,所有的“主机”(node 上的容器)由 Kubernetes
博文视点Broadview
2023/05/19
1.8K0
基于 Apache APISIX 的全流量 API 网关
云原生网关 APISIX 的核心流程以源码分析的方式剖析其工作原理
Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
苏州程序大白
2022/04/28
4.6K0
云原生网关 APISIX 的核心流程以源码分析的方式剖析其工作原理
Kong网关介绍[通俗易懂]
传统服务如下左图,通用函数重复使用在多个服务中,系统庞大僵化难以管理,由于会冲击其他服务导致的扩展困难,由于系统限制导致生产率低,如下右图是kong的解决方案
全栈程序员站长
2022/10/01
5.5K0
Kong网关介绍[通俗易懂]
APISIX初探
Apisix 是一个用使用 lua 语言编写的网关控制器,相比官网介绍的 apisix 是一个网关,apisix 的实际用途更像是一个控制器。因为其本身代码不承载流量。apisix 运行于 openresty 之上,openresty 运行于 nginx 之上。
云原生小白
2021/08/13
6.1K0
APISIX初探
K8S Ingress 之 Apache APISIX 解析
在云原生时代,基于主流的云操作系统 Kubernetes ,其常见的外部流量访问方式主要基于以下 NodePort、LoadBalancer 以及 Ingress 等。
Luga Lee
2021/12/09
4.1K0
K8S Ingress 之 Apache APISIX 解析
Apache APISIX 初体验
Apache APISIX 是一个基于 OpenResty 和 Etcd 实现的动态、实时、高性能的 API 网关,目前已经是 Apache 的顶级项目。提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等。可以使用 APISIX 来处理传统的南北流量以及服务之间的东西向流量。
我是阳明
2022/02/11
9900
Apache APISIX 初体验
APISIX Ingress 控制器的安装及原理
APISIX 是动态、实时、高性能的 API 网关。它提供丰富的流量管理功能,比如负载均衡、动态上游、金丝雀发布、熔断、认证、可观测性等。既可以使用 APISIX API 网关处理传统的南北向流量,也可以使用它处理服务间的东西向流量。同时,它也可被用作 Kubernetes Ingress 控制器。 APISIX Ingress 控制器提供 Helm 安装方式,但是使用原生 YAML 安装,更加有助于理解其原理。
小阑本阑
2023/06/09
1.3K0
APISIX Ingress 控制器的安装及原理
简单测试 APISIX2.6 网关
Apache APISIX是一个动态的、实时的、高性能的 API 网关。它提供丰富的流量管理功能,例如负载均衡、动态上游服务、金丝雀发布、断路、身份验证、可观察性等。您可以使用 Apache APISIX 来处理传统的南北流量,以及服务之间的东西流量。2019 年 10 月份,深圳支流科技把网关 APISIX 贡献给 Apache 基金会,他们提供商业版本,以下内容基于社区版本。
张善友
2021/06/17
1.8K0
简单测试 APISIX2.6  网关
相关推荐
国产微服务网关 APISIX,有点意思,直接开锤,换掉家门口的 Nginx
更多 >
交个朋友
加入数据技术工作实战群
获取实战干货 交流技术经验
加入[架构及运维] 腾讯云技术交流站
云架构设计 云运维最佳实践
加入数据技术趋势交流群
大数据技术前瞻 数据驱动业务实践
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档