IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Flask模型相关之relationship -> 正文阅读

[Python知识库]Flask模型相关之relationship

模型内容 relationship 1对多

需求: 用户进行留言,也要可以通过留言找到对应的用户
这样用户和留言的关系:1对多

1、创建模型,即创建表

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class UserInfo(db.Model):

	# 因为I是大写,所以数据库自动生成时,会加"_",数据库名变成:user_info
	
	# 自定义表名,如果不写,默认模型名即上面的:user_info
	# __tablename__ = 'userinfo'
	
	id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
	# 可查看Column的__init__参数内容,可填参数有很多
	username = db.Column(db.String(50), nullable=False)
	password = db.Column(db.String(255), nullable=False)
	phone = db.Column(db.String(11), unique=True, nullable=False)
	comments = db.relationship('Comment', backref='user')  
	# backref 是本函数的名字,用于其他地方引用,这个可以先忽略,因为关联的是评论表,本次内容没有
	
class MessageBoard(db.Model):
	# 管理用户留言
	
	id = db.Column(db.Integer, primary_key=True, autoincrement=True)
	content = db.Column(db.String(255), nullable=False)
	create_at = db.Column(db.DateTime, default=datetime.now)
	user_id = db.Column(db.Integer, db.ForeignKey('user_info.id')) # 外键
	user = db.relationship('User', backref='messages') # 用户表关联留言表,

relationship 和外键不一样,外键是真实存在于表结构中的,而relationship只是存在逻辑系统中,在物理上或表内容结构上是找不到的对应关系的,类似于内存中,只是在当前flask中可以通过留言表找到用户表

注意:relationship 只能单向关联,不能双向关联,否则会报错,即模型(UserInfo)和(MessageBoard)不能都相互关联对方,可以关联其它表。

2、视图中使用

# view.py

......

# ---->>>: 留言板
@user_bp.route('/messages_board', methods=['GET'])  
def messages_board():
	uid = session.get('uid')
	user = User.query.get(uid)
	page = int(request.args.get('page', 1))
	pagination = MessageBoard.query.filter().order_by(-MessageBoard.create_at) \
		.paginate(page=page, per_page=5)
	# pagination 根据条件取到留言表的对象,是个列表
	return render_template('user/messages_board.html',
						   user=user,
						   pagination=pagination)

3、模板中使用

<!--messages_board.html-->
		
{% extends 'base.html' %}

{% block newcontent %}

	<!--留言板的显示-->
    <div id="comment_item">
        <!--判断评论列表对象有没有值-->
        {% if pagination.items %}
            <!--循环评论列表对象,取出每一个对象-->
            {% for message in pagination.items %}
                <div class="item">
                    <div class="item_left">

	<!--应用relationship:通过message对象找到与之关联的user表,然后再通过user表找到用户头像,外键的话没有这么方便,要先找到对应的外键id,再去user表去查询找到icon-->
                        <img src="{% if message.user.icon %}
                                {{ url_for('static', filename=message.user.icon) }}
                            {% else %}
                                {{ url_for('static', filename='images/touxiang.png') }}
                            {% endif %} " alt="" class="message-image">
                    </div>

                    <div class="item_right">
                        <div>
	<!--应用relationship:通过message对象找到关联的user表,然后再通过user表找到用户名-->
                            {% if message.user.username %}
                                <span>{{ message.user.username }}</span>
                            {% else %}
                                <span>匿名用户</span>
                            {% endif %}
							<!--通过message对象找到留言的时间-->
                            <span>{{ message.create_at }}</span>
                        </div>
                        <div>
							<!--通过message对象找到留言的内容-->
                            <div>{{ message.content }}</div>
                        </div>
                    </div>

                </div>
            {% endfor %}
        {% else %}
            <div class="item" style="color: gray">
                当前还没有留言哦~~~~
            </div>
        {% endif %}
    </div>

{% endblock %}
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:45:38  更:2022-03-21 20:47:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:41:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码