Python 业务操作分类指南
1. 数据查询类操作
1.1 基本查询
def get_user_by_id(user_id):
"""根据ID获取用户"""
user = User.objects.get(id=user_id)
return user
def get_active_users():
"""获取所有活跃用户"""
users = User.objects.filter(is_active=True)
return list(users)
def get_users_by_conditions(name=None, age_gt=None):
"""多条件查询用户"""
query = User.objects.all()
if name:
query = query.filter(name__contains=name)
if age_gt:
query = query.filter(age__gt=age_gt)
return query
1.2 关联查询
def get_user_with_orders(user_id):
"""查询用户及其所有订单(关联查询)"""
user = User.objects.select_related('profile').get(id=user_id)
user = User.objects.prefetch_related('orders').get(id=user_id)
return user
1.3 聚合统计
from django.db.models import Count, Sum, Avg
def get_user_statistics():
"""用户数据统计"""
stats = {
'total_users': User.objects.count(),
'active_users': User.objects.filter(is_active=True).count(),
'avg_age': User.objects.aggregate(Avg('age'))['age__avg'],
'users_by_city': User.objects.values('city').annotate(count=Count('id'))
}
return stats
2. 数据创建类操作
2.1 单条创建
def create_user(user_data):
"""创建新用户"""
try:
user = User.objects.create(
username=user_data['username'],
email=user_data['email'],
age=user_data.get('age', 18)
)
return {'success': True, 'user': user}
except Exception as e:
return {'success': False, 'error': str(e)}
2.2 批量创建
def create_users_bulk(users_data):
"""批量创建用户(性能优化)"""
users = [
User(
username=data['username'],
email=data['email']
)
for data in users_data
]
created_users = User.objects.bulk_create(users)
return created_users
2.3 复杂对象创建
def create_order_with_items(order_data, items_data):
"""创建订单及相关商品(事务操作)"""
from django.db import transaction
with transaction.atomic():
order = Order.objects.create(
user_id=order_data['user_id'],
total_amount=order_data['total_amount']
)
order_items = []
for item in items_data:
order_items.append(OrderItem(
order=order,
product_id=item['product_id'],
quantity=item['quantity']
))
OrderItem.objects.bulk_create(order_items)
return order
3. 数据更新类操作
3.1 单字段更新
def update_user_name(user_id, new_name):
"""更新用户名称"""
try:
user = User.objects.get(id=user_id)
user.name = new_name
user.save(update_fields=['name'])
return {'success': True, 'message': '更新成功'}
except User.DoesNotExist:
return {'success': False, 'error': '用户不存在'}
3.2 批量更新
def update_user_status(user_ids, is_active):
"""批量更新用户状态"""
updated_count = User.objects.filter(id__in=user_ids).update(
is_active=is_active,
updated_at=timezone.now()
)
return updated_count
3.3 条件更新
def increment_user_score(user_id, points):
"""增加用户积分(原子操作)"""
from django.db.models import F
updated = User.objects.filter(id=user_id).update(
score=F('score') + points
)
return updated > 0
4. 数据删除类操作
4.1 单条删除
def delete_user(user_id):
"""删除用户(逻辑删除)"""
try:
user = User.objects.get(id=user_id)
user.is_deleted = True
user.deleted_at = timezone.now()
user.save()
return {'success': True, 'message': '删除成功'}
except User.DoesNotExist:
return {'success': False, 'error': '用户不存在'}
4.2 批量删除
def delete_inactive_users():
"""批量删除长时间不活跃的用户"""
from datetime import timedelta
from django.utils import timezone
cutoff_date = timezone.now() - timedelta(days=365)
deleted_count, _ = User.objects.filter(
is_active=False,
last_login__lt=cutoff_date
).delete()
return deleted_count
5. 业务验证类操作
5.1 数据验证
def validate_user_data(user_data):
"""验证用户数据"""
errors = []
required_fields = ['username', 'email']
for field in required_fields:
if not user_data.get(field):
errors.append(f'{field}是必填字段')
email = user_data.get('email')
if email and '@' not in email:
errors.append('邮箱格式不正确')
age = user_data.get('age')
if age and (age < 0 or age > 150):
errors.append('年龄必须在0-150之间')
return {'is_valid': len(errors) == 0, 'errors': errors}
5.2 权限验证
def check_permission(user_id, resource, action):
"""检查用户权限"""
from django.contrib.auth.decorators import permission_required
user = User.objects.get(id=user_id)
if not user.role:
return False
permissions = {
'admin': ['read', 'write', 'delete'],
'user': ['read'],
'guest': []
}
return action in permissions.get(user.role, [])
6. 接口调用类操作
6.1 HTTP API调用
import requests
import json
def call_external_api(url, method='GET', data=None, headers=None):
"""调用外部API"""
default_headers = {
'Content-Type': 'application/json',
'User-Agent': 'MyApp/1.0'
}
if headers:
default_headers.update(headers)
try:
if method.upper() == 'GET':
response = requests.get(url, headers=default_headers, params=data)
elif method.upper() == 'POST':
response = requests.post(url, headers=default_headers, json=data)
elif method.upper() == 'PUT':
response = requests.put(url, headers=default_headers, json=data)
else:
return {'success': False, 'error': '不支持的HTTP方法'}
response.raise_for_status()
return {'success': True, 'data': response.json()}
except requests.RequestException as e:
return {'success': False, 'error': str(e)}
6.2 API参数构建
def build_api_params(base_params, dynamic_params):
"""构建API请求参数"""
params = base_params.copy()
for key, value in dynamic_params.items():
if value is not None:
params[key] = value
if 'date_range' in params:
params['start_date'] = params['date_range'][0]
params['end_date'] = params['date_range'][1]
del params['date_range']
return params
7. 数据处理类操作
7.1 数据转换
def transform_user_data(users):
"""转换用户数据格式"""
result = []
for user in users:
transformed = {
'id': user.id,
'name': user.username,
'contact': {
'email': user.email,
'phone': user.phone
},
'meta': {
'created_at': user.date_joined.strftime('%Y-%m-%d'),
'is_active': user.is_active
}
}
result.append(transformed)
return result
7.2 数据清洗
def clean_user_data(raw_data):
"""清洗用户数据"""
cleaned_data = {}
for key, value in raw_data.items():
if isinstance(value, str):
cleaned_data[key] = value.strip()
else:
cleaned_data[key] = value
if 'age' in cleaned_data:
try:
cleaned_data['age'] = int(cleaned_data['age'])
except (ValueError, TypeError):
cleaned_data['age'] = None
cleaned_data = {k: v for k, v in cleaned_data.items()
if v not in [None, '']}
return cleaned_data
8. 文件操作类
8.1 文件上传处理
def handle_file_upload(uploaded_file, user_id):
"""处理文件上传"""
import os
from django.core.files.storage import FileSystemStorage
allowed_extensions = ['.jpg', '.png', '.pdf']
file_ext = os.path.splitext(uploaded_file.name)[1].lower()
if file_ext not in allowed_extensions:
return {'success': False, 'error': '不支持的文件格式'}
if uploaded_file.size > 5 * 1024 * 1024:
return {'success': False, 'error': '文件大小不能超过5MB'}
fs = FileSystemStorage()
filename = f"user_{user_id}_{uploaded_file.name}"
saved_path = fs.save(filename, uploaded_file)
return {'success': True, 'path': saved_path}
9. 缓存操作类
9.1 缓存读写
from django.core.cache import cache
def get_or_set_cache(key, func, timeout=300):
"""获取或设置缓存(缓存穿透保护)"""
data = cache.get(key)
if data is not None:
return data
data = func()
if data is not None:
cache.set(key, data, timeout)
return data
10. 事务与锁操作
10.1 数据库事务
from django.db import transaction
@transaction.atomic
def transfer_money(from_account_id, to_account_id, amount):
"""转账操作(事务保证一致性)"""
from_account = Account.objects.select_for_update().get(id=from_account_id)
to_account = Account.objects.select_for_update().get(id=to_account_id)
if from_account.balance < amount:
raise ValueError("余额不足")
from_account.balance -= amount
to_account.balance += amount
from_account.save()
to_account.save()
Transaction.objects.create(
from_account=from_account,
to_account=to_account,
amount=amount
)
return True
业务操作分类总结
| 类别 | 典型操作 | 常见方法/技术 |
|---|
| 查询类 | 获取数据、条件查询、关联查询 | get(), filter(), select_related(), prefetch_related() |
| 创建类 | 新增数据、批量创建 | create(), bulk_create(), save() |
| 更新类 | 修改字段、批量更新 | update(), save(), F表达式 |
| 删除类 | 软删除、硬删除 | delete(), 逻辑删除标记 |
| 验证类 | 数据验证、权限检查 | 表单验证、权限装饰器 |
| 接口类 | API调用、参数处理 | requests库、API封装 |
| 处理类 | 数据转换、清洗 | 字典操作、类型转换 |
| 文件类 | 上传下载、文件处理 | 文件存储、格式验证 |
| 缓存类 | 缓存读写、一致性 | cache.set(), cache.get() |
| 事务类 | 原子操作、并发控制 | transaction.atomic, select_for_update() |
最佳实践建议
- 单一职责:每个函数只做一件事
- 错误处理:使用try-except捕获预期异常
- 日志记录:关键操作添加日志
- 参数验证:入口处验证所有输入
- 性能考虑:批量操作优先于循环操作
- 事务边界:相关操作放在同一事务中
- 缓存策略:合理使用缓存提高性能
- 代码复用:提取公共方法避免重复代码