💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
基于安卓云笔记系统介绍
云笔记系统是一款基于Django框架开发的综合性知识管理平台,采用Python作为后端开发语言,结合MySQL数据库进行数据存储,前端通过uni-app框架实现跨平台兼容,支持微信小程序和安卓应用双端访问。系统围绕用户的学习和工作需求,构建了完整的笔记生态体系,包含笔记信息管理、智能标签分类、社区互动交流、活动组织参与、待办事项提醒等核心功能模块。平台通过用户管理模块实现身份认证和权限控制,利用敏感词过滤和举报记录功能维护社区环境,通过论坛分类和活动类型管理提供个性化服务体验。系统采用C/S与B/S混合架构设计,既保证了数据处理的高效性,又实现了用户交互的便捷性,为现代知识工作者提供了一个集记录、整理、分享、协作于一体的数字化笔记解决方案,满足个人知识管理和团队协作的多样化需求。
基于安卓云笔记系统演示视频
基于安卓云笔记系统演示图片
基于安卓云笔记系统代码展示
from pyspark.sql import SparkSession
from django.http import JsonResponse
from django.views import View
from django.db import transaction
from django.core.paginator import Paginator
from django.utils import timezone
from .models import NoteInfo, User, Tag, CommunityInteraction, SensitiveWord
import json
import re
import jieba
class NoteInfoManagement(View):
def __init__(self):
self.spark = SparkSession.builder.appName("CloudNoteSystem").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def post(self, request):
data = json.loads(request.body)
note_title = data.get('title', '')
note_content = data.get('content', '')
user_id = data.get('user_id')
tag_ids = data.get('tag_ids', [])
if not all([note_title, note_content, user_id]):
return JsonResponse({'code': 400, 'message': '标题、内容和用户ID不能为空'})
try:
user = User.objects.get(id=user_id)
except User.DoesNotExist:
return JsonResponse({'code': 404, 'message': '用户不存在'})
content_words = list(jieba.cut(note_content))
spark_df = self.spark.createDataFrame([(word,) for word in content_words], ["word"])
word_count = spark_df.groupBy("word").count().collect()
keywords = [row.word for row in sorted(word_count, key=lambda x: x['count'], reverse=True)[:5]]
with transaction.atomic():
note = NoteInfo.objects.create(title=note_title, content=note_content, user=user, keywords=','.join(keywords), create_time=timezone.now())
if tag_ids:
tags = Tag.objects.filter(id__in=tag_ids)
note.tags.set(tags)
note.save()
return JsonResponse({'code': 200, 'message': '笔记创建成功', 'note_id': note.id, 'keywords': keywords})
def get(self, request):
user_id = request.GET.get('user_id')
keyword = request.GET.get('keyword', '')
page = int(request.GET.get('page', 1))
page_size = int(request.GET.get('page_size', 10))
if not user_id:
return JsonResponse({'code': 400, 'message': '用户ID不能为空'})
notes_query = NoteInfo.objects.filter(user_id=user_id, is_deleted=False)
if keyword:
keyword_filter = re.compile(keyword, re.IGNORECASE)
notes_query = notes_query.filter(models.Q(title__iregex=keyword) | models.Q(content__iregex=keyword))
notes_query = notes_query.order_by('-create_time')
paginator = Paginator(notes_query, page_size)
notes_page = paginator.get_page(page)
notes_data = []
for note in notes_page:
note_dict = {'id': note.id, 'title': note.title, 'content': note.content[:100] + '...', 'create_time': note.create_time.strftime('%Y-%m-%d %H:%M:%S'), 'tags': [tag.name for tag in note.tags.all()], 'keywords': note.keywords.split(',') if note.keywords else []}
notes_data.append(note_dict)
return JsonResponse({'code': 200, 'message': '获取成功', 'data': notes_data, 'total': paginator.count, 'page': page, 'page_size': page_size})
class CommunityInteractionManagement(View):
def __init__(self):
self.spark = SparkSession.builder.appName("CommunityAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def post(self, request):
data = json.loads(request.body)
interaction_type = data.get('type', '') # like, comment, share
content = data.get('content', '')
user_id = data.get('user_id')
target_note_id = data.get('target_note_id')
if not all([interaction_type, user_id, target_note_id]):
return JsonResponse({'code': 400, 'message': '交互类型、用户ID和目标笔记ID不能为空'})
try:
user = User.objects.get(id=user_id)
target_note = NoteInfo.objects.get(id=target_note_id)
except (User.DoesNotExist, NoteInfo.DoesNotExist):
return JsonResponse({'code': 404, 'message': '用户或笔记不存在'})
if interaction_type == 'comment' and content:
sensitive_words = SensitiveWord.objects.values_list('word', flat=True)
content_words = list(jieba.cut(content))
spark_df = self.spark.createDataFrame([(word,) for word in content_words], ["word"])
sensitive_df = self.spark.createDataFrame([(word,) for word in sensitive_words], ["sensitive_word"])
filtered_content = content
for sensitive in sensitive_words:
if sensitive in content:
filtered_content = filtered_content.replace(sensitive, '*' * len(sensitive))
else:
filtered_content = content
existing_interaction = CommunityInteraction.objects.filter(user=user, target_note=target_note, interaction_type=interaction_type).first()
if existing_interaction and interaction_type in ['like', 'share']:
existing_interaction.delete()
return JsonResponse({'code': 200, 'message': f'{interaction_type}已取消'})
with transaction.atomic():
interaction = CommunityInteraction.objects.create(user=user, target_note=target_note, interaction_type=interaction_type, content=filtered_content, create_time=timezone.now())
if interaction_type == 'like':
target_note.like_count = CommunityInteraction.objects.filter(target_note=target_note, interaction_type='like').count()
target_note.save()
return JsonResponse({'code': 200, 'message': f'{interaction_type}操作成功', 'interaction_id': interaction.id})
def get(self, request):
note_id = request.GET.get('note_id')
interaction_type = request.GET.get('type', 'all')
page = int(request.GET.get('page', 1))
page_size = int(request.GET.get('page_size', 10))
if not note_id:
return JsonResponse({'code': 400, 'message': '笔记ID不能为空'})
interactions_query = CommunityInteraction.objects.filter(target_note_id=note_id)
if interaction_type != 'all':
interactions_query = interactions_query.filter(interaction_type=interaction_type)
interactions_query = interactions_query.order_by('-create_time')
paginator = Paginator(interactions_query, page_size)
interactions_page = paginator.get_page(page)
interactions_data = []
for interaction in interactions_page:
interaction_dict = {'id': interaction.id, 'type': interaction.interaction_type, 'content': interaction.content, 'user_name': interaction.user.username, 'create_time': interaction.create_time.strftime('%Y-%m-%d %H:%M:%S')}
interactions_data.append(interaction_dict)
interaction_stats = {'like_count': CommunityInteraction.objects.filter(target_note_id=note_id, interaction_type='like').count(), 'comment_count': CommunityInteraction.objects.filter(target_note_id=note_id, interaction_type='comment').count(), 'share_count': CommunityInteraction.objects.filter(target_note_id=note_id, interaction_type='share').count()}
return JsonResponse({'code': 200, 'message': '获取成功', 'data': interactions_data, 'stats': interaction_stats, 'total': paginator.count, 'page': page, 'page_size': page_size})
class TagManagement(View):
def __init__(self):
self.spark = SparkSession.builder.appName("TagAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def post(self, request):
data = json.loads(request.body)
tag_name = data.get('name', '').strip()
tag_color = data.get('color', '#007bff')
user_id = data.get('user_id')
description = data.get('description', '')
if not all([tag_name, user_id]):
return JsonResponse({'code': 400, 'message': '标签名称和用户ID不能为空'})
if len(tag_name) > 20:
return JsonResponse({'code': 400, 'message': '标签名称不能超过20个字符'})
try:
user = User.objects.get(id=user_id)
except User.DoesNotExist:
return JsonResponse({'code': 404, 'message': '用户不存在'})
existing_tag = Tag.objects.filter(name=tag_name, user=user).first()
if existing_tag:
return JsonResponse({'code': 409, 'message': '该标签已存在'})
user_tags = Tag.objects.filter(user=user)
tag_names = [tag.name for tag in user_tags]
spark_df = self.spark.createDataFrame([(name,) for name in tag_names + [tag_name]], ["tag_name"])
similar_tags = spark_df.filter(spark_df.tag_name.contains(tag_name[:2]) if len(tag_name) >= 2 else spark_df.tag_name == tag_name).collect()
if len(similar_tags) > 1:
similar_names = [row.tag_name for row in similar_tags if row.tag_name != tag_name]
return JsonResponse({'code': 201, 'message': f'创建成功,发现相似标签: {", ".join(similar_names[:3])}', 'similar_tags': similar_names})
with transaction.atomic():
tag = Tag.objects.create(name=tag_name, color=tag_color, user=user, description=description, create_time=timezone.now())
return JsonResponse({'code': 200, 'message': '标签创建成功', 'tag_id': tag.id, 'tag_name': tag.name})
def get(self, request):
user_id = request.GET.get('user_id')
search_keyword = request.GET.get('search', '').strip()
page = int(request.GET.get('page', 1))
page_size = int(request.GET.get('page_size', 20))
if not user_id:
return JsonResponse({'code': 400, 'message': '用户ID不能为空'})
tags_query = Tag.objects.filter(user_id=user_id, is_deleted=False)
if search_keyword:
tags_query = tags_query.filter(name__icontains=search_keyword)
tags_query = tags_query.order_by('-create_time')
paginator = Paginator(tags_query, page_size)
tags_page = paginator.get_page(page)
tags_data = []
for tag in tags_page:
note_count = tag.noteinfo_set.filter(is_deleted=False).count()
tag_dict = {'id': tag.id, 'name': tag.name, 'color': tag.color, 'description': tag.description, 'note_count': note_count, 'create_time': tag.create_time.strftime('%Y-%m-%d %H:%M:%S')}
tags_data.append(tag_dict)
tag_usage_stats = Tag.objects.filter(user_id=user_id).annotate(usage_count=models.Count('noteinfo')).order_by('-usage_count')[:5]
popular_tags = [{'name': tag.name, 'usage_count': tag.usage_count, 'color': tag.color} for tag in tag_usage_stats]
return JsonResponse({'code': 200, 'message': '获取成功', 'data': tags_data, 'popular_tags': popular_tags, 'total': paginator.count, 'page': page, 'page_size': page_size})
基于安卓云笔记系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目