153 lines
4.8 KiB
Python
153 lines
4.8 KiB
Python
![]() |
"""
|
|||
|
CreatorProfile头像字段使用示例
|
|||
|
|
|||
|
演示如何在Django项目中使用avatar字段来处理本地图片和外部URL
|
|||
|
"""
|
|||
|
|
|||
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|||
|
from apps.daren_detail.models import CreatorProfile
|
|||
|
from django.conf import settings
|
|||
|
import os
|
|||
|
|
|||
|
def create_creator_with_local_avatar():
|
|||
|
"""创建一个使用本地图片作为头像的创作者"""
|
|||
|
|
|||
|
# 方式1:通过Django admin或表单上传图片
|
|||
|
# 用户上传图片后,Django会自动保存到 MEDIA_ROOT/avatars/ 目录
|
|||
|
creator = CreatorProfile.objects.create(
|
|||
|
name="张三",
|
|||
|
category="Beauty & Personal Care",
|
|||
|
followers=10000
|
|||
|
)
|
|||
|
|
|||
|
# 假设有一个图片文件
|
|||
|
# with open('path/to/image.jpg', 'rb') as f:
|
|||
|
# creator.avatar.save('zhang_san.jpg', f)
|
|||
|
|
|||
|
print(f"创作者: {creator.name}")
|
|||
|
print(f"头像URL: {creator.get_avatar_url()}")
|
|||
|
|
|||
|
return creator
|
|||
|
|
|||
|
def create_creator_with_external_url():
|
|||
|
"""创建一个使用外部URL作为头像的创作者"""
|
|||
|
|
|||
|
creator = CreatorProfile.objects.create(
|
|||
|
name="李四",
|
|||
|
avatar_url="https://example.com/avatar.jpg",
|
|||
|
category="Fashion Accessories",
|
|||
|
followers=20000
|
|||
|
)
|
|||
|
|
|||
|
print(f"创作者: {creator.name}")
|
|||
|
print(f"头像URL: {creator.get_avatar_url()}")
|
|||
|
|
|||
|
return creator
|
|||
|
|
|||
|
def create_creator_with_both():
|
|||
|
"""创建一个既有本地图片又有外部URL的创作者(优先使用本地图片)"""
|
|||
|
|
|||
|
creator = CreatorProfile.objects.create(
|
|||
|
name="王五",
|
|||
|
avatar_url="https://example.com/backup-avatar.jpg",
|
|||
|
category="Sports & Outdoor",
|
|||
|
followers=30000
|
|||
|
)
|
|||
|
|
|||
|
# 如果后来上传了本地图片,会优先使用本地图片
|
|||
|
# creator.avatar.save('wang_wu.jpg', image_file)
|
|||
|
|
|||
|
print(f"创作者: {creator.name}")
|
|||
|
print(f"头像URL: {creator.get_avatar_url()}")
|
|||
|
|
|||
|
return creator
|
|||
|
|
|||
|
# API使用示例
|
|||
|
def api_response_example():
|
|||
|
"""API响应示例"""
|
|||
|
|
|||
|
# 在视图中使用序列化器
|
|||
|
from apps.daren_detail.serializers import CreatorProfileSerializer
|
|||
|
from django.http import HttpRequest
|
|||
|
|
|||
|
creator = CreatorProfile.objects.first()
|
|||
|
|
|||
|
# 创建一个模拟的request对象
|
|||
|
request = HttpRequest()
|
|||
|
request.META['HTTP_HOST'] = 'localhost:8000'
|
|||
|
request.META['wsgi.url_scheme'] = 'http'
|
|||
|
|
|||
|
serializer = CreatorProfileSerializer(creator, context={'request': request})
|
|||
|
data = serializer.data
|
|||
|
|
|||
|
print("API响应示例:")
|
|||
|
print(f"名称: {data['name']}")
|
|||
|
print(f"本地头像字段: {data.get('avatar')}")
|
|||
|
print(f"外部头像URL: {data.get('avatar_url')}")
|
|||
|
print(f"实际显示URL: {data.get('avatar_display_url')}")
|
|||
|
|
|||
|
# 前端使用示例(JavaScript)
|
|||
|
frontend_example = """
|
|||
|
// 前端JavaScript使用示例
|
|||
|
|
|||
|
// 获取创作者数据
|
|||
|
fetch('/api/daren_detail/creators/1/')
|
|||
|
.then(response => response.json())
|
|||
|
.then(data => {
|
|||
|
// 显示头像
|
|||
|
const avatarImg = document.getElementById('avatar');
|
|||
|
|
|||
|
// 使用avatar_display_url字段,它会自动选择合适的URL
|
|||
|
if (data.avatar_display_url) {
|
|||
|
avatarImg.src = data.avatar_display_url;
|
|||
|
avatarImg.style.display = 'block';
|
|||
|
} else {
|
|||
|
// 如果没有头像,显示默认头像
|
|||
|
avatarImg.src = '/static/images/default-avatar.png';
|
|||
|
}
|
|||
|
|
|||
|
// 或者可以检查具体的字段类型
|
|||
|
if (data.avatar) {
|
|||
|
// 这是本地上传的图片
|
|||
|
console.log('使用本地头像:', data.avatar);
|
|||
|
} else if (data.avatar_url) {
|
|||
|
// 这是外部URL
|
|||
|
console.log('使用外部头像:', data.avatar_url);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// 上传头像示例
|
|||
|
function uploadAvatar(file, creatorId) {
|
|||
|
const formData = new FormData();
|
|||
|
formData.append('avatar', file);
|
|||
|
|
|||
|
fetch(`/api/daren_detail/creators/${creatorId}/`, {
|
|||
|
method: 'PATCH',
|
|||
|
body: formData,
|
|||
|
headers: {
|
|||
|
'X-CSRFToken': getCookie('csrftoken') // CSRF令牌
|
|||
|
}
|
|||
|
})
|
|||
|
.then(response => response.json())
|
|||
|
.then(data => {
|
|||
|
console.log('头像上传成功:', data.avatar_display_url);
|
|||
|
// 更新页面上的头像显示
|
|||
|
document.getElementById('avatar').src = data.avatar_display_url;
|
|||
|
})
|
|||
|
.catch(error => {
|
|||
|
console.error('头像上传失败:', error);
|
|||
|
});
|
|||
|
}
|
|||
|
"""
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
print("CreatorProfile头像字段使用示例")
|
|||
|
print("="*50)
|
|||
|
print()
|
|||
|
print("1. 支持本地图片上传到 media/avatars/ 目录")
|
|||
|
print("2. 支持外部URL链接")
|
|||
|
print("3. get_avatar_url() 方法优先返回本地图片URL")
|
|||
|
print("4. 序列化器提供avatar_display_url字段用于前端显示")
|
|||
|
print()
|
|||
|
print("前端JavaScript示例:")
|
|||
|
print(frontend_example)
|