首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用CreateView CBV在提交时将图像文件保存到Django

可以通过以下步骤实现:

  1. 首先,确保在Django项目中已经配置好了文件上传的相关设置。在settings.py文件中,确保以下设置已正确配置:
代码语言:txt
复制
MEDIA_ROOT = '/path/to/media/folder'
MEDIA_URL = '/media/'

其中,MEDIA_ROOT是文件上传后保存的路径,MEDIA_URL是文件在网页中访问的URL。

  1. 创建一个继承自CreateView的视图类,并在其中定义表单类和模型类。假设模型类为Image,表单类为ImageForm,可以按照以下方式定义视图类:
代码语言:txt
复制
from django.views.generic.edit import CreateView
from .models import Image
from .forms import ImageForm

class ImageCreateView(CreateView):
    model = Image
    form_class = ImageForm
    template_name = 'image_create.html'
    success_url = '/success/'

其中,model指定了模型类,form_class指定了表单类,template_name指定了渲染模板的路径,success_url指定了提交成功后的跳转页面。

  1. 创建一个表单类ImageForm,用于接收图像文件的上传。可以按照以下方式定义表单类:
代码语言:txt
复制
from django import forms
from .models import Image

class ImageForm(forms.ModelForm):
    class Meta:
        model = Image
        fields = ['image']

其中,fields指定了表单中需要显示的字段,这里只有一个字段image,用于接收图像文件。

  1. 在模板文件image_create.html中,使用form标签渲染表单,并添加enctype属性以支持文件上传:
代码语言:txt
复制
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

其中,form.as_p会将表单渲染为p标签形式。

  1. 在urls.py中配置URL路由,将ImageCreateView与对应的URL路径关联起来:
代码语言:txt
复制
from django.urls import path
from .views import ImageCreateView

urlpatterns = [
    path('create/', ImageCreateView.as_view(), name='image_create'),
]

这样,当访问/create/路径时,将会调用ImageCreateView视图类。

通过以上步骤,就可以在使用CreateView CBV提交表单时将图像文件保存到Django中。在提交成功后,图像文件将会保存到MEDIA_ROOT指定的路径中,并且在模型类Image中创建一个对应的记录。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

类视图 vs. 函数视图

如上面代码所示, 当我们把视图绑定到 url conf 使用的 as_view 挂载其实返回的是一个函数....你可以django.views.generic引用它们....#2 观点 「仅使用django.views.generic.View, 不用GV」 此观点认为, View 就足够了, 并且 View 是真正的CBV, 而通用视图则不是真正的 CBV....函数视图和通用视图中间位置. #3 观点 「除非必要, 否则避免适用视图」 一般建议是从功能视图开始,这样更容易阅读和理解。并且在你需要的地方使用 CBV。一般在哪里需要用到 CBV?...结论 我觉得如果是初学者在做线上项目,不了解面向对象适用函数式编程是个好的选择,无论是对于以后维护还是开发阶段,都能 hold 住。

2.4K10

Django中请求的生命周期

Django中,当我们访问一个的url,会通过路由匹配进入相应的html网页中....当用户浏览器中输入url,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django...对于from表单来说,提交数据只有get和post两种方法 另外的方法可以通过Ajax方法来提交 服务端根据个人请求信息的不同来操作数据库,可以使用原生的SQL语句,也可以使用Django的ORM语句....Django从数据库中查询处理完用户想要的数据,结果返回给用户....从Django中返回的响应内容包含响应头和响应体 Django中,有的时候一个视图函数,执行完成后会使用HttpResponse来返回一个字符串给客户端.

2.6K100

Django的请求生命周期

Django中,当我们访问一个的url,会通过路由匹配进入相应的html网页中....当用户浏览器中输入url,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django...对于from表单来说,提交数据只有get和post两种方法 另外的方法可以通过Ajax方法来提交 服务端根据个人请求信息的不同来操作数据库,可以使用原生的SQL语句,也可以使用Django的ORM语句....Django从数据库中查询处理完用户想要的数据,结果返回给用户....从Django中返回的响应内容包含响应头和响应体 Django中,有的时候一个视图函数,执行完成后会使用HttpResponse来返回一个字符串给客户端.

52420

Django之视图层与模板层

,好在django会对它做进一步的处理与封装以便我们更为方便地提取数据,比如 对于form表单来说,提交数据的常用方法为GET与POST 1:如果表单属性method='GET',那么提交表单,...为空、无用 2:如果表单属性method='POST',那么提交表单,表单内的所有数据都会存放于请求体中,发送给django 后会封装到request.body里,此时django为了方便我们提取数据...1,如果无需上传文件,还是推荐使用更为精简的编码格式1 我们除了可以采用form表单向django提交数据外,还可以采用ajax技术,ajax可以提交的数据格式有:1、编码 格式1 2、编码格式2...3、json,当ajax采用POST方法提交前两种格式的数据django的处理方案同上,但是当 ajax采用POST方法提交json格式的数据django会将接收到的数据存放于HttpRequest.body...,如<input type="hidden" name="csrfmiddlewaretoken" value="dmje28mFo...OvnZ5"> # 2、使用form表单提交POST请求,会提交上述随机字符串

9.2K10

03.Django基础三之视图函数

为了代码放在某处,大家约定成俗视图放置项目(project)或应用程序(app)目录中的名为views.py的文件中。...Django使用请求和响应对象来通过系统传递状态。   当浏览器向服务端请求一个页面Django创建一个HttpRequest对象,该对象包含关于请求的元数据。...注意:使用CBV,urls.py中也做对应的修改:: # urls.py from django.conf.urls import url from myapp.views import MyView...cbv的实现原理通过看django的源码就很容易明白,大体就是由url路由到这个cbv之后,通过cbv内部的dispatch方法进行分发,get请求分发给cbv.get方法处理,post请求分发给cbv.post...处理非 HTTP 形式的报文非常有用,例如:二进制图片、XML,Json等。   但是,如果要处理表单数据的时候,推荐还是使用 HttpRequest.POST 。

4.9K30

Django-DRF | 请求

Django REST框架构建Web API。...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...默认输入url的请求方式即为get,当请求方式为get,若带有需要传递的其他参数,则会将该参数的name和value补充url中一并提交,post方式则将数据放在内容中一并提交,不再url中显示。...浏览器发送的request数据包的header中,可以看到这些内容,例如: 一、CBV 视图里使用类处理请求,url中一个路径对应一个类。...定义类需要继承 View url中需要添加 as_view() 类里面使用 from 表单提交,只有 get 和 post 方法 类里面使用 ajax 发送数据,支持 restful 规范 'get

62220

python 终极篇 --- django

为了代码放在某处,大家约定成俗视图放置项目(project)或应用程序(app)目录中的名为views.py的文件中。                                    ...注意: 使用CBV,urls.py中也做对应的修改: # urls.py中 url(r'^add_class/$', views.AddClass.as_view()), CBV简单的流程:    ...# 使用CBV要注意,请求过来后会先执行dispatch()这个方法,如果需要批量对具体的请求处理方法,如get,post等做一些操作的时候,这里我们可以手动改写dispatch方法,这个dispatch...扩展阅读 使用CBV要注意,请求过来后会先执行dispatch()这个方法                    Request对象和Response对象                   request...处理非 HTTP 形式的报文非常有用,例如:二进制图片、XML,Json等。   但是,如果要处理表单数据的时候,推荐还是使用 HttpRequest.POST 。

1.6K10

python-Django-URL 路由(二)

Django URL路由的示例 下面是一个简单的Django应用程序的示例,它使用URL路由来处理客户端请求。...在这个示例中,我们这些视图函数定义名为views.py的文件中:: from django.shortcuts import render, get_object_or_404, redirect...如果请求方法是POST,视图函数获取用户提交的文章标题和内容,并创建一个新的Post对象,然后将用户重定向到新创建的文章的详细页面。...如果请求方法是POST,视图函数获取用户提交的文章标题和内容,并更新现有的Post对象,然后将用户重定向到更新后的文章的详细页面。...这个视图函数使用Django的通用视图类CreateView来处理创建新文章的表单,然后重定向到post_list视图函数,这个视图函数渲染一个包含所有文章的列表的HTML模板。

80620

Django学习笔记之CBV和FBV

FBV FBV(function base views) 就是视图里使用函数处理请求。 之前django的学习中,我们一直使用的是这种方式,所以不再赘述。...CBV CBV(class base views) 就是视图里使用类处理请求。 Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。...使用Mixin 我觉得要理解django的class-based-view(以下简称cbv),首先要明白django引入cbv的目的是什么。...django1.3之前,generic view也就是所谓的通用视图,使用的是function-based-view(fbv),亦即基于函数的视图。...cbv的实现原理通过看django的源码就很容易明白,大体就是由url路由到这个cbv之后,通过cbv内部的dispatch方法进行分发,get请求分发给cbv.get方法处理,post请求分发给cbv.post

94010

django中ModelForm多表单组合的解决方案

这里仅以CreateView为例说明,因为它相对最复杂,接下来的多ModelForm的提交也是CreateView上进行的。...比如CreateView就会由django自动的把页面上POST出的form数据解析到model生成的表单(或者form_calss指定的ModelForm类型表单),同时调用表单的save方法数据添加到模型对应的数据库表中...TemplateResponseMixin提供render_to_response方法响应通过context上下文模板上渲染。...所以,在用CreateView、一个模型、一个模板实现添加一行记录的功能是多么简单,因为这些父类会自动生成object,渲染到模板,解析form表单,save到数据库中。...4、多个ModelForm一个form里提交 终于可以回到本文的主题了。

3.3K20

Django内置的通用类视图CBV及示例

自带的view如下表所示: 类名 功能 例子 View 基本View, 可以在任何时候使用 见后面详细介绍 RedirectView 重新定向到其他URL 访问"/log-in/"的用户重新定向到"/...FormView 提交From 网站联系我们或emai订阅form CreateView 创建对象 创建新文章页 UpdateView 更新对象 修改文章页 DeleteView 删除对象 删除文章页...slug_url_kwarg参数,使用slug_field字段执行针对slug的查询.当query_pk_and_slug为True,get_object()将使用主键和slug执行查询....object属性被视图赋值(即使是None).它返回一个包含这些内容的字典: object:这个视图显示的对象(self.object) context_object_name:self.object也存储...可以直接用Django通用视图里的UpdateView和CreateView

3.2K10

不会DRF?源码都分析透了确定不来看?

快速使用DRF写出接口 序列化和反序列化 drf快速使用 views.py serializer.py urls.py settings的app中注册 models.py postman测试 CBV源码流程分析...序列化: Django中获取到的数据默认是模型对象(QuerySet对象),但是模型对象数据无法直接提供给前端或别的平台使用,我们需要把数据进行序列化,变成字符串或json数据提供给前端或其他平台;...且看分析源码执行过程~ '''请求来了不考虑中间件的情况下,从路由的匹配关系和视图函数来看''' 1、cbv路由写法:path('test/', views.TestView.as_view()) #...使用request一样,只是多了一个request.data request.data:前端POST提交的数据,可以处理多种格式的数据,无论前端传什么编码post提交的数据都在data中 ps:原来提交的数据...# 原来的django的request对象中没有data,使得request.data-->无论什么编码格式,post提交数据,data都有值 from django.views import View

1.3K10

Django之views系统

为了代码放在某处,大家约定成俗视图放置项目(project)或应用程序(app)目录中的名为views.py的文件中。...Django使用请求和响应对象来通过系统传递状态。 当浏览器向服务端请求一个页面Django创建一个HttpRequest对象,该对象包含关于请求的元数据。...CBV,urls.py中也做对应的修改: # urls.py中 url(r'^add_class/$', views.AddClass.as_view()), 给视图加装饰器 使用装饰器装饰FBV FBV...CBV 类中的方法与独立函数不完全相同,因此不能直接函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。...处理非 HTTP 形式的报文非常有用,例如:二进制图片、XML,Json等。   但是,如果要处理表单数据的时候,推荐还是使用 HttpRequest.POST 。

2.2K70

CSRF 跨站请求伪造

但是,一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是每次页面加载使用 javascript 遍历整个 dom 树,对于...如果不用{% csrf_token %}标签,在用 form 表单,要再次跳转页面会报403权限错误。 用了{% csrf_token %}标签, form 表单提交数据,才会成功。...如果不用{% csrf_token %}标签,在用 form 表单,要再次跳转页面会报403权限错误。 用了{% csrf_token %}标签, form 表单提交数据,才会成功。...这里使用装饰器就可以解决~ 两个装饰器可用: csrf_protect: 需要验证 csrf_exempt:不需要验证 装饰器的使用方法按照FBV或者CBV装饰器的使用方法即可 导入:from django.views.decorators.csrf...装饰器示例,CBV装饰器有三种用法分别局部验证都可以使用 # 方式一,加在方法上验证,可以使用 '''局部验证,全局的csrf禁用''' from django.utils.decorators import

1.1K20
领券