首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Flask简介与安装
第一个Flask应用
Flask路由与视图函数
Flask模板引擎Jinja2
Flask模板继承与包含
Flask静态文件处理
Flask表单处理
Flask请求与响应
Flask配置与日志
Flask蓝图与模块化设计
Flask扩展插件介绍
Flask数据库操作(一):SQLAlchemy基础
Flask数据库操作(二):迁移与模型关系
Flask数据库操作(三):数据库迁移与版本控制
Flask会话管理
Flask中间件与钩子函数
Flask错误处理与测试
Flask性能优化(一):缓存策略
Flask性能优化(二):异步与后台任务
Flask部署与运维
Flask源码解析(一):Werkzeug与Jinja2
Flask源码解析(二):路由系统
Flask源码解析(三):视图与请求处理
Flask源码解析(四):扩展插件机制
Flask安全性与防护策略
Flask国际化与本地化
Flask RESTful API开发(一):基础概念
Flask RESTful API开发(二):认证与权限控制
Flask RESTful API开发(三):版本控制与文档
Flask与前端框架集成(一):React
Flask与前端框架集成(二):Vue.js
Flask与前端框架集成(三):Angular
Flask微服务架构与实践(一):服务拆分与通信
Flask微服务架构与实践(二):容器化与编排
Flask微服务架构与实践(三):监控与故障排查
Flask性能监控与调优
Flask与其他Web框架对比分析
Flask插件开发与实践
Flask项目实战经验分享
Flask生态圈及发展趋势
实战项目一:搭建个人博客系统
实战项目二:开发在线投票系统
实战项目三:构建企业级后台管理系统
实战项目四:实现文件上传与下载功能
实战项目五:开发实时聊天室
实战项目六:构建RESTful API接口
实战项目七:实现用户权限管理系统
实战项目八:开发微信小程序后台
实战项目九:构建电商平台(一):商品管理
实战项目九:构建电商平台(二):购物车与订单
实战项目九:构建电商平台(三):支付与物流
实战项目十:搭建分布式爬虫系统
实战项目十一:实现数据可视化与分析
实战项目十二:开发在线教育平台(一):课程管理
实战项目十二:开发在线教育平台(二):视频点播
实战项目十二:开发在线教育平台(三):直播互动
实战项目十三:构建社交网络(一):用户关系
实战项目十三:构建社交网络(二):信息流与推荐
实战项目十三:构建社交网络(三):朋友圈与评论
实战项目总结与拓展
当前位置:
首页>>
技术小册>>
Flask框架入门指南
小册名称:Flask框架入门指南
### 实战项目十三:构建社交网络(一):用户关系 在本章节中,我们将深入探索如何使用Flask框架构建一个社交网络应用的核心部分之一——用户关系系统。用户关系是社交网络的基石,它定义了用户之间的连接、互动和社区结构。通过实现用户关系系统,我们能够让用户能够添加好友、查看好友列表、以及基于这些关系进行各种社交活动,如分享内容、评论、点赞等。 #### 1. 项目概述 在构建社交网络之前,我们需要明确项目的基本需求和目标。本章节将聚焦于用户关系的建立与管理,包括用户注册、登录、添加好友、删除好友、以及查看好友列表等功能。我们将使用Flask作为后端框架,结合数据库(如SQLite或MySQL)来存储用户数据和关系数据。 #### 2. 数据库设计 ##### 2.1 用户表(Users) 首先,我们需要一个用户表来存储用户的基本信息,如用户名、密码(加密存储)、邮箱等。考虑到用户关系的需要,我们还需要为每个用户添加一个唯一标识符(如ID),用于关联其他表中的数据。 ```sql CREATE TABLE Users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, email TEXT UNIQUE NOT NULL ); ``` ##### 2.2 用户关系表(UserRelationships) 为了表示用户之间的好友关系,我们需要一个用户关系表。这个表至少应包含两个字段:发起者ID(from_user_id)和接收者ID(to_user_id),以及一个可选的状态字段(status)来表示关系的状态(如已请求、已接受、已拒绝、已删除等)。 ```sql CREATE TABLE UserRelationships ( id INTEGER PRIMARY KEY AUTOINCREMENT, from_user_id INTEGER NOT NULL, to_user_id INTEGER NOT NULL, status TEXT NOT NULL DEFAULT 'pending', FOREIGN KEY(from_user_id) REFERENCES Users(id), FOREIGN KEY(to_user_id) REFERENCES Users(id), UNIQUE(from_user_id, to_user_id) ); ``` 注意:这里使用了`UNIQUE`约束来确保每对用户之间只存在一种状态的关系记录。 #### 3. Flask应用结构 为了组织代码,我们将按照Flask项目的典型结构来构建应用: - `app.py`:Flask应用的主入口。 - `templates/`:存放HTML模板文件。 - `static/`:存放静态文件,如CSS、JavaScript和图片。 - `models.py`:定义数据库模型。 - `routes.py`:定义路由和视图函数。 - `forms.py`:定义Web表单。 #### 4. 实现用户注册与登录 在开始实现用户关系之前,我们需要确保用户能够注册和登录。这通常涉及创建用户表单、处理表单数据、验证用户输入、以及将用户信息保存到数据库中。 ##### 4.1 用户注册 在`forms.py`中定义一个用户注册表单: ```python from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, Email, EqualTo, ValidationError from models import db, User class RegistrationForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Password', validators=[DataRequired()]) confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField('Register') def validate_username(self, username): user = User.query.filter_by(username=username.data).first() if user is not None: raise ValidationError('Please use a different username.') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user is not None: raise ValidationError('Please use a different email address.') ``` 在`routes.py`中处理注册请求: ```python from flask import render_template, redirect, url_for, flash from .forms import RegistrationForm from .models import db, User @app.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationForm() if form.validate_on_submit(): hashed_password = generate_password_hash(form.password.data) # 假设已导入generate_password_hash new_user = User(username=form.username.data, email=form.email.data, password=hashed_password) db.session.add(new_user) db.session.commit() flash('Congratulations, you are now a registered user!') return redirect(url_for('login')) return render_template('register.html', title='Register', form=form) ``` ##### 4.2 用户登录 类似地,定义登录表单和视图函数。 #### 5. 实现用户关系 ##### 5.1 添加好友 首先,我们需要在前端提供一个界面让用户能够输入想要添加为好友的用户名或邮箱。然后,在后端,我们需要根据输入的信息查询数据库,判断该用户是否存在,并创建相应的用户关系记录。 ```python @app.route('/add_friend/<int:user_id>', methods=['POST']) @login_required # 假设已定义login_required装饰器 def add_friend(user_id): current_user = current_user() # 假设已定义current_user函数 if user_id == current_user.id: flash('You cannot add yourself as a friend!') return redirect(url_for('profile', user_id=current_user.id)) friend = User.query.get_or_404(user_id) # 检查是否已经存在关系 relationship = UserRelationship.query.filter_by(from_user_id=current_user.id, to_user_id=friend.id).first() if relationship and relationship.status == 'accepted': flash('You are already friends with this user.') return redirect(url_for('profile', user_id=friend.id)) # 创建新的关系记录 new_relationship = UserRelationship(from_user_id=current_user.id, to_user_id=friend.id, status='pending') db.session.add(new_relationship) db.session.commit() flash('Friend request sent!') return redirect(url_for('profile', user_id=friend.id)) ``` ##### 5.2 查看好友列表 用户需要能够查看自己的好友列表。这通常意味着从数据库中检索当前用户所有已接受好友关系的记录,并显示相应的用户信息。 ```python @app.route('/friends', methods=['GET']) @login_required def friends(): current_user = current_user() friends = UserRelationship.query.filter_by(from_user_id=current_user.id, status='accepted').join(User, UserRelationship.to_user_id == User.id).all() return render_template('friends.html', title='Friends', friends=friends) ``` 在`friends.html`模板中,你可以遍历`friends`列表,并显示每个好友的用户名或其他信息。 #### 6. 总结与扩展 本章节介绍了如何在Flask应用中构建社交网络的核心部分之一——用户关系系统。我们设计了数据库模型,实现了用户注册、登录、添加好友以及查看好友列表等功能。然而,一个完整的社交网络应用还需要更多功能,如消息系统、内容分享、隐私设置等。在后续章节中,我们将继续探索这些高级特性,以构建一个功能全面的社交网络应用。 此外,随着用户数量的增加,我们还需要考虑应用的可扩展性和性能优化问题。例如,使用缓存来减少数据库查询次数、优化数据库查询语句、以及考虑使用更高效的数据库管理系统等。这些都是在开发大型社交网络应用时需要重点关注的问题。
上一篇:
实战项目十二:开发在线教育平台(三):直播互动
下一篇:
实战项目十三:构建社交网络(二):信息流与推荐
该分类下的相关小册推荐:
Flask框架零基础入门与实战开发