master
Li 1 year ago
parent 9fed807881
commit 01678fc7da

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

@ -1,247 +0,0 @@
用例名:查看订单。
用例的功能或其业务目标:使用户可以查看其各类订单。
前置条件:用户已登录。
触发条件:用户发起查看订单请求。
执行者:用户。
基本交互动作:
1.用户发起查看“我的订单”请求,系统接受请求后调用订单信息,返回至商城界面。
用例名:结算支付。
用例的功能或其业务目标:使用户可以支付其购物车内的订单或支付其待支付订单。
前置条件:用户已登录。
触发条件:用户发起支付订单请求。
执行者:用户。
基本交互动作:
1.用户通在支付界面发送支付请求,系统根据其支付请求调取相应商品的基础信息。
2.系统将商品价格信息及支付请求发送至支付宝,支付宝返回支付信息。
3.用户支付成功后,系统新建订单信息。
扩展交互动作:
2a.若支付失败
2a1.系统建立失败订单。
用例名:评价商品。
用例的功能:对已购买完成的商品进行星级和文字评价 。
前置条件:用户已登录。
触发条件:商城系统接收到查看订单并评价的请求。
基本交互动作:
1. 用户完成购买商品查看订单,商城系统判断用户登陆状态。
2. 商城系统查找订单信息并显示本订单的星级选择和文字评价。
3. 用户选择星级,进行评价,商城系统将用户评价结果上传。
4. 用户查看商品评价区即可看到自己评论。
扩展交互动作:
1a.若用户未登录
1a1 跳转登陆界面。
2a.若用户评价字数少于6个字
2a1则显示弹窗要求字数需超过6个字。
用例描述:增删收货地址。
用例的功能:对将要购买的商品进行修改或者添加收货地址。
前置条件:用户已登录。
触发条件:商城系统接收到用户并评价的请求。
基本交互动作:
1. 用户选择添加、删除收货地址,商城系统判断并登陆状态。
2. 商城系统显示已有地址及新地址填写栏。
扩展交互动作:
1a.若用户未登录
1a1 跳转登陆界面。
1b.若用户不增删地址
1b1 可以直接在已有地址上修改。
用例名:商品搜索。
用例的功能或其业务目标:为用户提供搜索商品的功能。
前置条件:用户已登录。
触发条件:用户发起搜索商品请求。
执行者:用户。
基本交互动作:
1.用户进入商城页面,商城系统返回商城的主页面。
2.用户搜索商品,商城系统检索用户输入的关键字。
3.商品系统返回检索到的相关商品,并呈现给用户。
扩展交互动作过程:
1a. 用户无法进入商店页面
1a1 用户得到一个“找不到网页”的错误页面。
2a.若没有检索到用户输入的关键字
2a1 用户得到一个没有相关商品的页面。
用例名:查看商品信息。
用例的功能或其业务目标:为用户提供查看商品信息的功能。
前置条件:用户已登录。
触发条件:用户发起查看商品链接请求。
执行者:用户。
基本交互动作:
1. 用户进入商城页面,商城系统返回商城的主页面。
2. 用户查看所需的商品,商城系统返回相关商品的详细信息。
扩展交互动作过程:
1a. 用户无法进入商店页面
1a1 用户得到一个“找不到网页”的错误页面。
用例名:加入购物车。
用例的功能或其业务目标:用户可以将其已选择的商品添加至购物车。
前置条件:用户已登录。
触发条件:商城系统接收到用户的选择商品请求。
执行者:用户。
基本交互动作:
1.用户选择商品加入购物车,商城系统判断用户登录状态。
2.商城系统检索用户选择的商品并将商品加入用户的购物车。
扩展交互动作:
1a.如果用户未登录
1a1 跳转到登录界面。
2a.若商品未能添加至购物车
2a1 显示加入购物车失败。
用例名:查看购物车。
用例的功能或其业务目标:满足用户查看商品购物清单的需求。
前置条件:商品已添加至购物车。
触发条件:商城系统接收到用户查看购物车请求。
执行者:用户。
基本交互动作:
1.用户选择购物车,商城系统打开购物车向用户显示购物清单。
扩展交互动作:
1a.如果购物车内无商品
1a1 显示弹窗购物车内无商品
用例名:增删商品。
用例的功能或其业务目标:满足用户在本平台上售卖商品的需求。
前置条件:用户已登录。
触发条件:用户发送增加商品的请求。
执行者:用户。
基本交互动作:
1.用户添加商品信息数据,商城系统判断商品信息是否符合要求。
2.如果不符合要求,反馈给用户。
3.用户提交后在页面展示出用户的商品列表。
扩展交互动作:
2a.新增商品超出上限。
2a1 跳出弹窗提示用户。
用例名:交易时间地点选定。
用例的功能或其业务目标:提供商品交易的时间(按照课表时间)以及地点(校内标志性地点),方便用户进行交易。
前置条件:处于添加商品窗口或查看商品页面。
触发条件:用户发送交易时间地点的请求。
执行者:用户。
基本交互动作:
1.用户在添加商品窗口选择时间和地点,供购买的用户选择。
2.商城系统将用户添加的时间和地点存在商品信息中。
3.购买用户在查看商品页面选择卖家提供的时间和地点。
4.商城系统把购买用户选定的时间地点呈现给用户

@ -0,0 +1,51 @@
import math
from django.db.models import Count
def cosine_similarity(user1, user2):
# 获取用户1和用户2共同购买的商品
user1_purchased = UserBehavior.objects.filter(user=user1, action='purchase')
user2_purchased = UserBehavior.objects.filter(user=user2, action='purchase')
common_products = set(user1_purchased.values_list('product', flat=True)).intersection(
user2_purchased.values_list('product', flat=True)
)
if not common_products:
return 0 # 无共同购买的商品相似度为0
# 计算余弦相似度
numerator = sum(user1_purchased.filter(product=product).count() *
user2_purchased.filter(product=product).count()
for product in common_products)
user1_norm = math.sqrt(sum(user1_purchased.count() for product in common_products))
user2_norm = math.sqrt(sum(user2_purchased.count() for product in common_products))
return numerator / (user1_norm * user2_norm)
def user_based_recommendation(user_id, num_recommendations=5):
users = User.objects.exclude(id=user_id)
user_similarities = []
for user in users:
similarity = cosine_similarity(user_id, user.id)
user_similarities.append((user, similarity))
# 按相似度降序排序
user_similarities.sort(key=lambda x: x[1], reverse=True)
recommended_products = set()
user_purchased_products = set(UserBehavior.objects.filter(user=user_id, action='purchase').values_list('product', flat=True))
for similar_user, similarity in user_similarities:
similar_user_purchased_products = set(UserBehavior.objects.filter(user=similar_user, action='purchase').values_list('product', flat=True))
# 获取与相似用户购买,但当前用户未购买的商品
recommendations = similar_user_purchased_products - user_purchased_products
recommended_products.update(recommendations)
if len(recommended_products) >= num_recommendations:
break
return Product.objects.filter(id__in=list(recommended_products))[:num_recommendations]

@ -0,0 +1,66 @@
from django.db import models
class Movie(models.Model):
title = models.CharField(max_length=200)
director = models.CharField(max_length=100)
actors = models.CharField(max_length=500)
genre = models.CharField(max_length=100)
# 添加其他特征字段
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
def extract_features(movie):
# 从电影对象中提取特征信息
title = movie.title
director = movie.director
actors = movie.actors
genre = movie.genre
# 在这里,您可以执行文本处理,如分词、去停用词等
tokens = word_tokenize(title.lower() + " " + director.lower() + " " + actors.lower() + " " + genre.lower())
features = [word for word in tokens if word not in stopwords.words('english')]
return features
import math
def cosine_similarity(features1, features2):
# 计算余弦相似度
dot_product = sum(features1.count(word) * features2.count(word) for word in set(features1) & set(features2)
magnitude1 = math.sqrt(sum(features1.count(word) ** 2 for word in features1))
magnitude2 = math.sqrt(sum(features2.count(word) ** 2 for word in features2))
if magnitude1 == 0 or magnitude2 == 0:
return 0 # 避免零除错误
return dot_product / (magnitude1 * magnitude2)
def content_based_recommendation(user, item, num_recommendations=5):
item_features = extract_features(item)
# 获取所有其他物品
all_items = Movie.objects.exclude(id=item.id)
# 计算每个物品与目标物品的相似度
similarities = [(other_item, cosine_similarity(item_features, extract_features(other_item))) for other_item in all_items]
# 根据相似度降序排序
similarities.sort(key=lambda x: x[1], reverse=True)
# 选择相似度最高的物品作为推荐
recommended_items = [item for item, similarity in similarities[:num_recommendations]]
return recommended_items
Loading…
Cancel
Save