ImageField用法的一个例子

本文以注册头像为例讲解一下ImageField怎么用。

第1步我们要定义一个ImageField

在models.py里面定义, 这个是用来写到数据库里面的。

def custom_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = '{}.{}'.format(uuid.uuid4().hex[:10], ext)
    return filename

class Operator(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=16, unique=True)
    photo = models.ImageField(null = True, blank=True, upload_to=custom_path)

    def __str__(self):
        return self.name

第2步我们要配置一下图片上传到哪里

在settings.py中加入下面的配置。这样所有的图片都会保存到media这个文件夹。

MEDIA_ROOT = 'media/'
MEDIA_URL = 'media/'

第3步我们要写view了

在views.py首先定义一个forms。不了解的话可以去百度一下Django forms。

from django import forms
from .models import Operator

class UserForm(forms.Form):
    username = forms.CharField(label='login name',max_length=50)
    password = forms.CharField(label='password',widget=forms.PasswordInput())
    photo = forms.ImageField(label='your photo')

这个UserForm是跟models.py定义的field对应的。

接着我们还需要写一个HTML

register.html

<!DOCTYPE html>
{% load static %}
<html>
<body>
<h1>注册页面</h1>
<form method = 'post' enctype="multipart/form-data">
{{userform.as_p}}
{% csrf_token %}
<input type="submit" value = "Register" />
</form>
</body>
</html>
然后我们在views.py中写一个POST响应函数
def register(request):
    if request.method == 'POST':
        #如果存在图片field,那么request.FILES是必要的,否则会报错。
        userform = UserForm(request.POST, request.FILES)
        if userform.is_valid():
            username = userform.cleaned_data['username']
            password = userform.cleaned_data['password']
            photo = userform.cleaned_data['photo']
            
            #保存数据
            new_operator = Operator.objects.create(username=username, password=password, photo = photo)
            #调用save()之后,图片会自动保存到media文件夹下。
            new_operator.save()
            
            return HttpResponse('regist success!!!')
    else:
        userform = UserForm()
    return render(request, 'register.html',{'userform':userform})

最后一步,我们要配置一下url

在app url中添加下面的字段

urlpatterns = [
    path('register/', views.register, name='register'),
]

上述代码是在Django 2.1.1中跑过的。1.x的版本url配置会有些不同。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值