Python+Django+SQLite制作TO-DO list(一、前期的小知识)

本文分享了一个项目新手从爬虫转向Web开发的心路历程,并详细介绍了使用PyCharm和Django搭建项目的步骤,以及HTML、CSS和JavaScript等前端基础知识的学习资源。

先贴上我的项目代码点击打开链接

项目新手,吐槽中给点建议也是不错的

1、先说说为什么开始做WEB

前些日子主攻爬虫,但是觉得只弄爬虫少了些什么,所以就觉得应该搞个网页试试,于是乎项目上马,说搞就搞

2、前期准备

部署好Pycharm、Django。

3、需要的知识储备

HTML的相关小知识:参考W3school

     1、HTML链接:<a href="www.example.com">这是一个链接</a>
     2、多行文字换行<br>
     3、<input type="submit">定义了提交按钮。当用户单击确认按钮时,表单的内容会被传送到另一个文件。表单的动作属性          定义了目的文件的文件名。由动作属性定义的这个文件通常会对接收到的输入数据进行相关的
        处理:
<form name="input" action="html_form_action.php" method="get">Username: <input type="text" name="user">
<input type="submit" value="Submit">
</form> 

        浏览器显示效果如下:

        Username: 假如您在上面的文本框内键入几个字母,然后点击确认按钮,那么输入数据会传送到 "html_form_action.php"         的页面。该页面将显示出输入的结果。

请始终将正斜杠添加到子文件夹。假如这样书写链接:href="http://www.runoob.com/html",就会向服务器产生两次 HTTP 请求。这是因为服务器会添加正斜杠到这个地址,然后创建一个新的请求,就像这样:href="http://www.runoob.com/html/"

目前还不大了解这句话,先mark

CSS的相关知识:参考菜鸟教程|CSS

JS的相关知识:参考菜鸟教程|JS

 

 

 

 

 

 

 

 

 

开发套基于 Python + Django 的鲜花推荐系统,可以分为以下几个核心部分:需求分析、技术架构设计、数据库建模、功能模块实现、推荐算法集成以及前端展示。下面我将详细为你讲解如何构建这样个系统。 --- ### 、系统目标 鲜花推荐系统的主要功能是根据用户的历史行为(如浏览、购买)、个人偏好、季节节日等因素,为用户智能推荐合适的鲜花产品。 --- ### 二、技术栈 - **后端框架**:Django - **数据库**:PostgreSQL / SQLite(开发阶段可用) - **推荐算法**:协同过滤(User-based 或 Item-based)、基于内容的推荐、或简单的规则引擎 - **前端**:HTML/CSS/JS + Bootstrap,或使用 Django REST Framework + Vue/React - **部署**:Gunicorn + Nginx + Docker(可选) --- ### 三、数据库模型设计(models.py) ```python from django.db import models from django.contrib.auth.models import User class Category(models.Model): name = models.CharField(max_length=100) description = models.TextField(blank=True) def __str__(self): return self.name class Flower(models.Model): name = models.CharField(max_length=200) description = models.TextField() price = models.DecimalField(max_digits=10, decimal_places=2) image = models.ImageField(upload_to='flowers/', blank=True, null=True) category = models.ForeignKey(Category, on_delete=models.CASCADE) stock = models.PositiveIntegerField(default=0) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name class UserPreference(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) favorite_colors = models.CharField(max_length=200, blank=True) # e.g., "red,white,pink" preferred_occasions = models.CharField(max_length=200, blank=True) # e.g., "birthday,anniversary" def __str__(self): return f"{self.user.username}'s preferences" class PurchaseHistory(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) flower = models.ForeignKey(Flower, on_delete=models.CASCADE) purchased_at = models.DateTimeField(auto_now_add=True) quantity = models.PositiveIntegerField() class Meta: ordering = ['-purchased_at'] class ViewHistory(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) flower = models.ForeignKey(Flower, on_delete=models.CASCADE) viewed_at = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['-viewed_at'] ``` --- ### 四、推荐逻辑实现(recommendations.py) ```python from collections import defaultdict from .models import PurchaseHistory, ViewHistory, Flower, UserPreference import random def get_user_based_recommendations(user, top_n=5): """ 简化版用户协同过滤:找到相似用户买过但当前用户没买过的花。 """ # 获取该用户已购买的花 purchased_flowers = PurchaseHistory.objects.filter(user=user).values_list('flower_id', flat=True) # 获取所有其他用户的购买记录 all_purchases = PurchaseHistory.objects.exclude(user=user) # 统计其他用户购买频率(按花统计) flower_scores = defaultdict(int) for purchase in all_purchases: if purchase.flower_id not in purchased_flowers: flower_scores[purchase.flower_id] += 1 recommended_ids = sorted(flower_scores, key=flower_scores.get, reverse=True)[:top_n] return Flower.objects.filter(id__in=recommended_ids) def get_content_based_recommendations(user, top_n=5): """ 基于内容推荐:根据用户偏好颜色和场合推荐匹配的花。 这里假设花名或描述中包含关键词(实际应使用标签系统)。 """ try: pref = UserPreference.objects.get(user=user) color_keywords = [c.strip() for c in pref.favorite_colors.split(',') if c.strip()] occasion_keywords = [o.strip() for o in pref.preferred_occasions.split(',') if o.strip()] except UserPreference.DoesNotExist: color_keywords = [] occasion_keywords = [] query = Flower.objects.all() scored_flowers = [] for flower in query: score = 0 name_desc = f"{flower.name} {flower.description}".lower() for word in color_keywords: if word.lower() in name_desc: score += 2 for word in occasion_keywords: if word.lower() in name_desc: score += 3 if score > 0: scored_flowers.append((flower, score)) scored_flowers.sort(key=lambda x: x[1], reverse=True) return [f[0] for f in scored_flowers[:top_n]] def hybrid_recommendations(user, top_n=5): """ 混合推荐:结合协同过滤与内容推荐 """ cf_recs = list(get_user_based_recommendations(user, top_n)) cb_recs = list(get_content_based_recommendations(user, top_n)) # 合并并去重,保持顺序 seen = set() combined = [] for f in cf_recs + cb_recs: if f.id not in seen: combined.append(f) seen.add(f.id) return combined[:top_n] ``` --- ### 五、视图函数示例(views.py) ```python from django.shortcuts import render from django.contrib.auth.decorators import login_required from .recommendations import hybrid_recommendations @login_required def recommended_flowers(request): recommendations = hybrid_recommendations(request.user, top_n=8) return render(request, 'flowers/recommended.html', { 'flowers': recommendations, 'title': '为您推荐' }) ``` --- ### 六、URL 配置(urls.py) ```python from django.urls import path from . import views urlpatterns = [ path('recommendations/', views.recommended_flowers, name='recommendations'), ] ``` --- ### 七、模板示例(templates/flowers/recommended.html) ```html <!DOCTYPE html> <html> <head> <title>{{ title }}</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container mt-4"> <h1>{{ title }}</h1> <div class="row"> {% for flower in flowers %} <div class="col-md-3 mb-4"> <div class="card"> {% if flower.image %} <img src="{{ flower.image.url }}" class="card-img-top" alt="{{ flower.name }}"> {% else %} <img src="https://via.placeholder.com/300" class="card-img-top" alt="No Image"> {% endif %} <div class="card-body"> <h5 class="card-title">{{ flower.name }}</h5> <p class="card-text">{{ flower.description|truncatewords:10 }}</p> <p class="text-primary"><strong>¥{{ flower.price }}</strong></p> </div> </div> </div> {% empty %} <p>暂无推荐商品。</p> {% endfor %} </div> </div> </body> </html> ``` --- ### 八、解释说明 1. **模型设计**: - `Flower` 表示鲜花信息; - `UserPreference` 存储用户偏好(颜色、用途等); - `PurchaseHistory` 和 `ViewHistory` 记录用户行为,用于推荐。 2. **推荐算法**: - 使用了简化版的 **协同过滤** 和 **基于内容的推荐**; - 实际生产环境可替换为 Scikit-learn、Surprise 库或 TensorFlow Recommenders。 3. **扩展性**: - 可引入标签系统(Tag)对花进行更细粒度分类; - 支持节日推荐(如母亲节主推康乃馨); - 加入评分系统(Rating)提升推荐精度。 4. **性能优化**: - 推荐结果可缓存(Redis); - 异步任务(Celery)定时更新推荐列表。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值