我的Django-blog学习(一):获取url地址的新方法

最近在根据追梦人物的Django搭建博客教程里学习搭建博客的项目:
在做到文章详情页的a标签的url时,在这里发现了之前我从来没用过的获取博客地址的方式

原本的想法是根据后台传来的数据对象里的pk值使用{% url 'url_name' 参数 %}获得地址。

新思路是在models里加一个get_url的函数,

class Post(models.Model):
    """
    文章
    """
    
    ...
    def get_absolute_url(self):
        return reverse('blog:detail', kwargs={'pk': self.pk})

在模板那边就能直接使用{{ post.get_absolute_url }}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这里提供一个简单的协同过滤推荐系统的接口项目,使用 Django REST framework 编写: 主要功能:根据用户的历史行为记录,推荐相似用户喜欢的商品。 模型: 1. User 表:用户信息表,包括用户 id、用户名等基本信息。 2. Item 表:商品信息表,包括商品 id、名称、描述等。 3. Rating 表:用户对商品的打分表,包括用户 id、商品 id、评分等信息。 API: 1. 获取所有用户信息:GET /api/users/ 2. 获取所有商品信息:GET /api/items/ 3. 获取指定用户的历史评分记录:GET /api/users/{user_id}/ratings/ 4. 获取指定商品的评分记录:GET /api/items/{item_id}/ratings/ 5. 获取指定用户的推荐商品列表:GET /api/users/{user_id}/recommendations/ 具体实现可以参考以下代码示例: models.py ```python from django.db import models class User(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Item(models.Model): name = models.CharField(max_length=100) description = models.TextField() def __str__(self): return self.name class Rating(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) item = models.ForeignKey(Item, on_delete=models.CASCADE) rating = models.IntegerField() def __str__(self): return f"{self.user.name} rated {self.item.name}: {self.rating}" ``` serializers.py ```python from rest_framework import serializers from .models import User, Item, Rating class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = '__all__' class ItemSerializer(serializers.ModelSerializer): class Meta: model = Item fields = '__all__' class RatingSerializer(serializers.ModelSerializer): class Meta: model = Rating fields = '__all__' ``` views.py ```python from django.shortcuts import get_object_or_404 from rest_framework import generics from rest_framework.response import Response from .models import User, Item, Rating from .serializers import UserSerializer, ItemSerializer, RatingSerializer class UserList(generics.ListAPIView): queryset = User.objects.all() serializer_class = UserSerializer class ItemList(generics.ListAPIView): queryset = Item.objects.all() serializer_class = ItemSerializer class RatingList(generics.ListAPIView): serializer_class = RatingSerializer def get_queryset(self): user_id = self.kwargs['user_id'] return Rating.objects.filter(user=user_id) class ItemRatingList(generics.ListAPIView): serializer_class = RatingSerializer def get_queryset(self): item_id = self.kwargs['item_id'] return Rating.objects.filter(item=item_id) class RecommendationList(generics.ListAPIView): serializer_class = ItemSerializer def get_queryset(self): user_id = self.kwargs['user_id'] user_ratings = Rating.objects.filter(user=user_id) similar_users = set() for rating in user_ratings: other_ratings = Rating.objects.filter(item=rating.item).exclude(user=user_id) for other_rating in other_ratings: if other_rating.rating >= 3 and rating.rating >= 3: similar_users.add(other_rating.user) recommendations = [] for similar_user in similar_users: similar_ratings = Rating.objects.filter(user=similar_user) for similar_rating in similar_ratings: if not Rating.objects.filter(user=user_id, item=similar_rating.item).exists(): recommendations.append(similar_rating.item) return recommendations ``` urls.py ```python from django.urls import path from .views import UserList, ItemList, RatingList, ItemRatingList, RecommendationList urlpatterns = [ path('users/', UserList.as_view()), path('items/', ItemList.as_view()), path('users/<int:user_id>/ratings/', RatingList.as_view()), path('items/<int:item_id>/ratings/', ItemRatingList.as_view()), path('users/<int:user_id>/recommendations/', RecommendationList.as_view()), ] ``` 以上代码仅为示例,实际项目中可能需要根据具体需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值