模型类的增删改查,QuerySet详解

本文详细介绍了使用Django ORM进行数据库查询的各种技巧,包括基本的get、filter、exclude方法,以及如何使用Q对象进行复杂查询,例如组合条件、模糊查询等。通过实际代码示例,展示了如何高效地从数据库中检索特定数据。

 

 在控制台输入即可,后期开发项目不会使用这种方法



 

 

 

 

 

 

 

from user.models import *

    user1 = User.objects.get(id=1)
    print(user1)

user_s = User.objects.all()

    print('user_s的类型是:', type(user_s))

from user.models import *

    user_s = User.objects.filter(id=1)
    print('user_s的类型是:', type(user_s))
    print(user_s)
    user = user_s[0]
    print(user)

 from user.models import *

    # 查询id不为1的user对象
    user_s = User.objects.exclude(id=1)
    print(user_s)
from user.models import *

    # 没有被逻辑删除的User
    user1_s = User.objects.filter(isdelete=0)
    print(user1_s)
    user2_s = User.objects.filter(isdelete__exact=0)
    print(user2_s)
    # 查询余额大于等于1000的User对象
    user3_s = User.objects.filter(money__gte=1000)
    print(user3_s)
    # 查询生日为空的User对象
    user4_s = User.objects.filter(birthday__isnull=True)
    print(user4_s)

from user.models import *

    # 查询用户名中包含'1'的用户
    user1_s = User.objects.filter(username__contains='1')
    print(user1_s)
    # 查询用户名已以'name1'开头的用户
    user2_s = User.objects.filter(username__startswith='name1')
    print(user2_s)
    # 查询邮箱以'@qq.com'结尾的用户
    user3_s = User.objects.filter(email__endswith='@qq.com')
    print(user2_s)
  # 查询在第一次创建后,发生修改的对象
    user_s = User.objects.filter(updateDatetime__gt=F('createDatetime'))

    from user.models import *

    from django.db.models import Q

    # 查询余额大于5000块的男性
    print(User.objects.filter(money__gt=5000, gender=0))  # 第一种 逗号
    print(User.objects.filter(Q(money__gt=5000) & Q(gender=0)))  # 第二种 Q(【条件】)&Q(【条件】)
    # 查询余额大于5000块的男性和余额大于2000的女性
    print(User.objects.filter(Q(money__gt=5000, gender=0) | Q(money__gt=2000, gender=1)))

 

<think>嗯,用户现在想了解如何在基于Python的美食推荐系统中实现用户管理的增删改查功能。首先,我需要回顾用户之前的问题和给出的引用内容。用户之前询问的是MVVM模式,而这次是关于用户管理的具体实现,特别是使用Python和Django框架。 根据提供的引用,用户提到的系统是基于Python+Django的,所以应该围绕Django的框架结构来回答。引用中提到的系统使用了Django ORM进行数据筛选,所以用户管理的增删改查应该也是通过Django的模型和视图来处理。用户可能希望得到具体的代码示例和步骤,比如如何定义模型、编写视图和模板,以及如何配置URL路由。 接下来,我需要确认用户的需求是否包括前端部分,比如是否使用Vue.js或者其他前端框架。根据引用3,系统是使用Django和Vue开发的,但用户的问题主要集中在用户管理的后端实现上,所以可能需要分开说明后端API和前端交互,或者如果用户管理是纯Django模板渲染的话,也需要明确。 用户可能还关心权限管理,比如只有管理员才能进行用户管理操作,这在引用中提到的用户管理模块可能已经涉及,所以需要提到Django的权限系统或自定义装饰器来限制访问。 另外,引用4提到了数据库配置,特别是MySQL的设置,所以在实现用户管理时,确保数据库连接正确,并在settings.py中配置好。用户管理涉及到数据的增删改查,所以需要定义User模型,可能使用Django内置的User模型或者自定义模型。 还需要考虑表单验证,比如创建和编辑用户时的输入验证,Django的ModelForm可以简化这个过程。同时,引用1提到推荐逻辑基于Django ORM的filter方法,所以在用户管理中,查询用户可能也会用到类似的过滤方法,比如通过用户名、邮箱等字段进行搜索。 用户可能还希望了解如何测试这些功能,比如单元测试,或者如何集成到现有的美食推荐系统中。此外,是否需要使用REST框架来构建API,还是直接使用Django的视图处理HTTP请求。 最后,需要确保回答结构清晰,分步骤说明,并提供代码示例,同时参考之前的引用内容,确保信息一致。可能还需要指出引用中提到的系统在用户管理方面的实际实现情况,比如引用3中提到的使用Python进行后端开发,MySQL作为数据库,所以在示例代码中要体现这些技术点。</think>### 基于 Django 的美食推荐系统用户管理增删改查实现详解 --- #### **1. 整体架构设计** 在基于 Django 的系统中,用户管理功能通常通过以下模块实现: - **Model 层**:定义用户数据结构和数据库操作 - **View 层**:处理 HTTP 请求和业务逻辑 - **Template 层**(可选):渲染用户管理界面 - **URL 路由**:映射请求到对应视图函数 ```mermaid graph LR A[用户请求] --> B(URL路由) B --> C{视图函数} C --> D[Model操作] D --> E[数据库] E --> C C --> F[返回响应] ``` --- #### **2. 具体实现步骤** ##### **2.1 定义用户模型** 在 `models.py` 中扩展 Django 内置用户模型(或自定义): ```python from django.contrib.auth.models import AbstractUser class CustomUser(AbstractUser): phone = models.CharField(max_length=20, blank=True) avatar = models.ImageField(upload_to='avatars/', null=True) food_preferences = models.ManyToManyField('FoodCategory', blank=True) class Meta: verbose_name = '用户' verbose_name_plural = verbose_name ``` *说明:通过继承 `AbstractUser` 添加美食偏好等定制字段[^3]* --- ##### **2.2 用户管理视图** 在 `views.py` 中实现增删改查逻辑: ```python from django.contrib.auth.decorators import login_required, user_passes_test from django.views.generic import ListView, UpdateView, DeleteView from .models import CustomUser # 管理员权限检查装饰器 def admin_check(user): return user.is_superuser @method_decorator(user_passes_test(admin_check), name='dispatch') class UserListView(ListView): model = CustomUser template_name = 'user_list.html' paginate_by = 10 # 分页显示 class UserUpdateView(UpdateView): model = CustomUser fields = ['username', 'email', 'phone', 'food_preferences'] template_name_suffix = '_update_form' success_url = reverse_lazy('user-list') class UserDeleteView(DeleteView): model = CustomUser success_url = reverse_lazy('user-list') ``` *关键点:* - 使用基于类的视图(Class-Based Views)简化代码 - 通过 `user_passes_test` 实现管理员权限控制[^3] --- ##### **2.3 用户注册/创建功能** 使用 Django 表单处理用户创建: ```python # forms.py from django import forms from django.contrib.auth.forms import UserCreationForm from .models import CustomUser class UserCreateForm(UserCreationForm): class Meta: model = CustomUser fields = ('username', 'email', 'password1', 'password2', 'phone') # views.py def user_create(request): if request.method == 'POST': form = UserCreateForm(request.POST) if form.is_valid(): form.save() return redirect('user-list') else: form = UserCreateForm() return render(request, 'user_create.html', {'form': form}) ``` *优势:自动处理密码哈希和验证[^4]* --- ##### **2.4 数据库配置** 在 `settings.py` 中配置 MySQL 数据库连接(参考引用[4]): ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'food_recommend', 'USER': 'your_db_user', 'PASSWORD': 'your_db_password', 'HOST': 'localhost', 'PORT': '3306', } } ``` --- ##### **2.5 路由配置** 在 `urls.py` 中定义访问路径: ```python from django.urls import path from .views import UserListView, UserUpdateView, UserDeleteView, user_create urlpatterns = [ path('users/', UserListView.as_view(), name='user-list'), path('users/create/', user_create, name='user-create'), path('users/<int:pk>/edit/', UserUpdateView.as_view(), name='user-update'), path('users/<int:pk>/delete/', UserDeleteView.as_view(), name='user-delete'), ] ``` --- #### **3. 前端模板示例** `user_list.html` 列表页模板片段: ```html <table class="table"> <thead> <tr> <th>用户名</th> <th>邮箱</th> <th>操作</th> </tr> </thead> <tbody> {% for user in object_list %} <tr> <td>{{ user.username }}</td> <td>{{ user.email }}</td> <td> <a href="{% url 'user-update' user.pk %}" class="btn btn-sm btn-warning">编辑</a> <a href="{% url 'user-delete' user.pk %}" class="btn btn-sm btn-danger">删除</a> </td> </tr> {% endfor %} </tbody> </table> ``` --- #### **4. 进阶优化建议** 1. **搜索过滤**:在列表视图添加搜索框 ```python class UserListView(ListView): def get_queryset(self): queryset = super().get_queryset() search_key = self.request.GET.get('q') if search_key: return queryset.filter( Q(username__icontains=search_key) | Q(email__icontains=search_key) ) return queryset ``` 2. **批量操作**:实现批量删除/导出功能 ```python def bulk_delete(request): if request.method == 'POST': selected_ids = request.POST.getlist('selected_users') CustomUser.objects.filter(id__in=selected_ids).delete() return redirect('user-list') ``` 3. **日志记录**:记录用户管理操作 ```python from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION def user_create(request): # ...保存后添加日志 LogEntry.objects.log_action( user_id=request.user.id, content_type_id=ContentType.objects.get_for_model(user).pk, object_id=user.id, object_repr=str(user), action_flag=ADDITION ) ``` --- #### **5. 安全注意事项** 1. 使用 `@login_required` 和 `@user_passes_test` 保护敏感操作 2. 对密码字段进行哈希处理(Django 已自动实现) 3. 限制普通用户访问管理接口 4. 使用 CSRF 令牌防护表单提交 --- ### 相关实践问题 1. **如何在用户管理中集成权限角色分配?** 2. **Django 如何实现用户密码的加密存储?** 3. **用户管理模块如何与推荐系统的协同过滤算法对接?**[^1] 4. **如何处理用户头像上传的存储和缩放?** 5. **如何通过 Django REST Framework 实现用户管理的 API 接口?** --- [^1]: 用户行为数据是推荐系统的重要输入源,通过记录用户的增删改查操作可优化推荐算法 [^3]: Django 的 ORM 和通用视图极大简化了数据库操作实现 [^4]: 正确的数据库配置是用户数据持久化的基础保障
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值