前后分离图片上传
编写模型类
进行迁移
class HeroImg(models.Model):
hero_name=models.CharField(max_length=20,verbose_name='英雄名字')
hero_img=models.ImageField(upload_to='imgs',verbose_name='头像')
class Meta:
verbose_name='头像表'
verbose_name_plural=verbose_name
db_table='heroimg'
def __str__(self):
return self.hero_name
upload_to`:此属性提供了一种设置上传目录和文件名的方法
- 可以 指定一个字符串值,则该字符串值可能包含
strftime()
格式,该格式将被文件上载的日期/时间替换(以便上载的文件不会填满给定目录) - 也可以指定一个固定的字符串
框架上传配置及ImageField
在项目根目录常见一个static文件夹里创建一个imgs文件夹
用来存放图片
在 项目的 setting.py
文件中添加 配置项
这样就可以在admin里进行添加数据
#配置存放图片的路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'static') # MEDIA_ROOT作为Django存储上传文件目录的完整路径, djangodemo为项目的名称
#配置url,用于访问图片资源
MEDIA_URL = '/media/' # 图片添加成功之后,url展示图片的访问路径
前后分离图片访问
静态路由映射
- 为了上传图片成功之后,可以正常展示图片,需要在 路由 后面添加 额外的 配置信息, 一般添加在主路由
- 如果单纯的是上传,文件并不用来显示或者读取,就不用添加
from django.conf.urls.static import static
from day14qtw import settings
urlpatterns = [
# path('admin/', admin.site.urls),
path('hero2/',views.Heroview2.as_view())
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
配置序列化器
在serializers文件中配置
from rest_framework import serializers
from myapp.models import HeroImg
class Imgserializers(serializers.ModelSerializer):
class Meta:
model=HeroImg
fields='__all__'
编写视图类ImageField字段序列化返回解析
from myapp.models import HeroImg
from rest_framework.viewsets import ModelViewSet
from myapp.serializers import Imgserializers
class Imgview(ModelViewSet):
queryset = HeroImg.objects.all()
serializer_class = Imgserializers
配置路由
from django.urls import path
from myapp import views
from rest_framework import routers
from django.conf.urls.static import static
from day14qtw import settings
urlpatterns = [
# path('admin/', admin.site.urls),
path('hero2/',views.Heroview2.as_view())
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
router=routers.SimpleRouter()
router.register('game',views.Gameview,'game')
router.register('hero',views.Heroview,'hero')
router.register('img',views.Imgview,'img') #配置路由
urlpatterns+=router.urls