在admin中上传图片

本文介绍在Django 2.0和Python 3.5.4环境下,使用ImageField上传图片的配置方法。需在setting.py中进行路径配置,在models中创建字段并迁移,绑定admin。还说明了如何配置以在admin中直接查看上传的图片,避免点开图片URL报错404。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章
环境:Django2.0 Python3.5.4

使用ImageField首先需要装Pillow。

 pip install Pillow 

配置

要在admin中上传图片,必须要在setting.py中经行路径配置,否则无法让django知道我们的路径在哪。为什么不在models中设置字段时直接设置绝对路径?在models中,只能设置相对路径,即upload_to所指的路径一定要是相对的。

配置MEDIA_URL,MEDIA_ROOT这2个关键字,我们可以把这个文件夹放在static中,但是MEDIA_URL后面不能写'/static/',MEDIA_URL相当于取别名
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static','image')(自己要upload_to的路径的文件夹)

models中创建字段

 class Test(models.Model):
     name = models.CharField(max_length=50)
     image = models.ImageField(upload_to='image')(这里的image是相对路径,绝对路径为:/static/image)
     def __str__(self):
         return self.name

建立好模型,需要进行迁移操作,

 python manage.py makemigrations  
 python manage.py migrate 

PS.如果是创建好表之后再想起来用保存图片的字段,需要在后面添加默认值defalt,否则django不知道为之前的表添加什么值,即使你还没有使用之前的数据库

绑定admin

admin.site.register(Test)

如何直接在admin中直接查看上传的图片

我们要看上传的图片还需要进一步配置,如果不配置,我们点开上传图片的url就会直接报错404,告诉我们在url配置中并没有你这个图片的url,无法跳转。
如何配置呢?
a.首先在setting中将我们的MEDIA_URL别名加在TEMPLATES中:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media',#在这加,前面都是一样的,只有最后的media是取你自己起的名字
            ],
        },
    },
]

b.找到urls.py,在里面引入setting

from django.conf import settings
from django.conf.urls.static import static

接着配置我们的urlpatterns

urlpatterns = [
    path('admin/', admin.site.urls),
   ……

] + static(settings.MEDIA_URL , document_root = settings.MEDIA_ROOT)#在列表后面加上这句

这样的话,我们点开admin中的图片路径就可以直接看到图片了

在FastAdmin框架中实现图片上传功能通常会涉及到前端HTML表单配合后端PHP处理。以下是基本步骤: 1. **前端表单**: - 在你的前端模板中,添加一个文件输入字段 `<input type="file" id="image-upload" name="image">`,允许用户选择要上传图片- 可能还会需要一个提交按钮 `<button type="submit">上传</button>`。 2. **JavaScript事件监听**: - 使用如jQuery或axios等库处理表单提交。当用户点击“上传”按钮时,发送HTTP请求到服务器。 3. **后端接收请求**: - 在FastAdmin的控制器(例如Controller.php)中,创建一个新的路由来处理图片上传。你可以使用`request()`函数获取上传的文件。 ```php public function handle_image_upload(Request $request) { // 获取上传的文件 $file = $request->file('image'); // 检查文件是否有效并存储 if ($file && $file->isValid()) { $filename = unique_name($file->getClientOriginalName()); $file->move(public_path('uploads'), $filename); } // 返回响应,比如JSON数据,告知前端上传成功 } ``` 4. **返回结果**: - 存储图片后,你需要将新的URL或者文件名返回给前端,以便在页面上显示。 5. **错误处理**: - 保证对文件大小、格式等限制的有效检查,并记录或展示上传错误信息。 6. **安全性考虑**: -上传的文件进行安全检查,防止潜在的安全风险,如XSS攻击。 记得在项目配置中设置正确的上传路径和权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值