当前位置:

首页 > 编程开发 > Python Django框架中表单怎么使用

Python Django框架中表单怎么使用

Django保证表单的正确显示需要添加CSRF(防止网站跨站请求伪造而默认开启的一种保护方式),在之间添加{%csrf_token%}在项目settings.py中*‘django.middleware.csrf.CsrfViewMiddleware’,*引入,如果没有此中间件,手动添加。文件上传首次打开路径是GET请求,如果点击上传是POST请求,如果文件内容不为空,则上传文件,上传路径为主项目下的media/uploads/,如果路径不存在则新建。open(os.path.jo

本文目录

      Django保证表单的正确显示需要添加CSRF(防止网站跨站请求伪造而默认开启的一种保护方式),在

      之间添加

      {% csrf_token %}

      Python Django框架中表单怎么使用

      在项目settings.py中 * ‘django.middleware.csrf.CsrfViewMiddleware’, * 引入,如果没有此中间件,手动添加。

      文件上传

      首次打开路径是GET请求,如果点击上传是POST请求,如果文件内容不为空,则上传文件,上传路径为主项目下的 media/uploads/,如果路径不存在则新建。open(os.path.join(path + myFile.name), ‘wb+’) 二进制读写打开对应文件,chunks()将文件分块读写。

      def upload_file(request):
          if request.method == "GET":
              return render(request, 'app1/upload.html')
          if request.method == "POST":
              myFile = request.FILES.get("myfile", None)
              if myFile:
                  path = 'media/uploads/'
                  if not os.path.exists(path):
                      os.makedirs(path)
                  dest = open(os.path.join(path + myFile.name), 'wb+')
                  for chunk in myFile.chunks():
                      dest.write(chunk)
                  dest.close()
                  return HttpResponse("上传完成")
              else:
                  return HttpResponse("没有上传文件")

      添加路由。

      Python Django框架中表单怎么使用

      Python Django框架中表单怎么使用

      文件已经上传成功。

      Form表单

      如下新建一个form.py写入如下代码

      from django import forms
      
      class UserInfoForm(forms.Form):
          '''用户状态'''
          STATUS = ((None, '请选择'), (0, '正常'), (1, '无效'),)
          username = forms.CharField(label="用户名称", min_length=6, widget=forms.widgets.TextInput(
              attrs={'class': 'form-control', 'placeholder': '请输入用户名称'}
          ))
          password = forms.CharField(label="密码", min_length=6, max_length=10, widget=forms.widgets.PasswordInput(
              attrs={'class': 'password'}, render_value=True
          ))
          age = forms.IntegerField(label="年龄", initial=1)
          mobile = forms.IntegerField(label="手机号码")
          status = forms.ChoiceField(label="用户状态", choices=STATUS)
          createdate = forms.DateTimeField(label="创建时间", required=False)

      表单字段

      表单字段说明
      CharField文本输入
      InterField/FloatField/DecimalField数值输入
      ChoiceField选择输入框 choices指定下拉列表
      FileField文件
      BooleanField复选框
      DateField/DateTimeField/TimeField时间输入框,可以设置输入格式 input_format=[“%Y-%m-%d %H:%M”]
      EmailField邮件输入框
      URLField路劲输入框
      ModelChoiceField从数据库获取下拉列表

      字段参数

      字段说明
      labellabel标签
      label_suffixLabel标签统一后缀信息
      initial初始值
      help_text字段描述信息
      error_messages字段描述信息
      validators验证规则
      required是否必须
      disabled字段是否可编辑
      widget指定HTML样式

      widget参数

      参数说明
      PasswordInput密码输入框
      HiddenInput隐藏元素
      Textarea文本域
      CheckboxInput复选框
      FileInput文件输入框
      RadioSelect单选按钮
      DateTimeInput时间输入框
      Select下拉列表
      SelectMuitiple多选框

      配置视图和路径显示对应表单

      app1下的views.py

      def userinfo_form(request):
          if request.method == "GET":
              myForm = UserInfoForm()
      
              return render(request, 'app1/userinfo.html', {'form_obj': myForm})

      userinfo.html

      
        
        
          
            {% csrf_token %} {{ form_obj.as_p }}
            
          
        
      

      Python Django框架中表单怎么使用

      • as_p 为表单提供

        标签

      • as_table 为表单提供

        标签

      • as_ui 为表单提供标签

      • 以上用了as_p,故源代码显示p标签。

        Python Django框架中表单怎么使用

        表单的验证

        • is_valid() 验证表单数据是否合法

        • cleaned_data 获取表单通过验证的数据

        • errors 表单验证的错误信息

        在form中添加如下代码

        class UserInfoForm__Msg(forms.Form):
            '''用户状态'''
            STATUS = ((None, '请选择'), (0, '正常'), (1, '无效'),)
            username = forms.CharField(label="用户名称", min_length=6, widget=forms.widgets.TextInput(
                attrs={'class': 'form-control', 'placeholder': '请输入用户名称'}
            ), error_messages={
                'required': '用户姓名不能为空', 'min_length': '长度不能少于6位', 'invalid': '不能含有特殊字符'
            })
            password = forms.CharField(label="密码", min_length=6, max_length=10, widget=forms.widgets.PasswordInput(
                attrs={'class': 'password'}, render_value=True
            ), error_messages={
                'required': '密码不能为空', 'min_length': '密码不能少于6位', 'max_length': '密码不能多余10位',
            })
            age = forms.IntegerField(label="年龄", initial=1, validators=[age_validate], error_messages={
                'required': '年龄不能为空',
            })
            mobile = forms.IntegerField(label="手机号码", validators=[mobile_validate], error_messages={
                'required': '手机号码不能为空',
            })
            status = forms.ChoiceField(label="用户状态", choices=STATUS, error_messages={
                'required': '用户状态不能为空',
            })
            createdate = forms.DateTimeField(label="创建时间", required=False)
        • required 为空的时候的错误信息

        • invalid 格式验证错误的信息

        • min_length和max_length 长度不在设定的范围的错误信息

        添加视图

        def userinfo_form_msg(request):
            if request.method == "GET":
                myForm = UserInfoForm__Msg()
                return render(request, 'app1/userinfoform.html', {'form_obj': myForm})
            else:
                f = UserInfoForm__Msg(request.POST)
                if f.is_valid():
                    print(f.cleaned_data['username'])
                else:
                    errors = f.errors
                    print(errors)
                    return render(request, 'app1/userinfoform.html', {'form_obj': f, 'errors': errors})
                return render(request, 'app1/userinfoform.html', {'form_obj': f})

        模板文件

        
          {% csrf_token %}
          

            {{ form_obj.username.label }}:{{ form_obj.username }} {{ errors.username.0 }}   

          

        {{ form_obj.password}}{{ errors.password.0 }}

          

        {{ form_obj.status.label }}:{{ form_obj.status }} {{ errors.status.0 }}

          

        {{ form_obj.age.label }}:{{ form_obj.age }} {{ errors.age.0 }}

          

        {{ form_obj.mobile.label }}:{{ form_obj.mobile }} {{ errors.mobile.0 }}

          错误信息汇总: {{ errors }}   

        Python Django框架中表单怎么使用

        这里还添加了表单的自我格式验证,获取表单的数据

        • f.clean() 获取全部数据

        • f.clean_date[] 获取对应值的数据

        • f.data 获取全部数据

        表单模型文件上传例子

        模板文件:upload_form.html

        
          {% csrf_token %} {{ form_obj.as_p }}
          
          
          

        模型文件

        在models.py中添加模型,这里没有主键默认会生成id的主键

        class ImgFile(models.Model):
            name = models.CharField(verbose_name='用户名称', max_length=300, default="")
            heading = models.FileField(verbose_name='文件名', upload_to='media/uploads/')
        
            def __str__(self):
                return self.name
        
            class Meta:
                verbose_name = ' 用户头像信息'
                db_table = 'user_img'

        表单模型 form.py

        class ImgFileForm(forms.Form):
            name = forms.CharField()
            heading = forms.FileField()

        视图模型

        如果上传了文件,将文件保存在对应的目录下,并返回文件的信息。

        def ingfileform(request):
            if request.method == "GET":
                f = ImgFileForm()
                return render(request, 'app1/upload_form.html', {'form_obj': f})
            else:
                f = ImgFileForm(request.POST, request.FILES)
                if f.is_valid():
                    name = f.cleaned_data['name']
                    heading = f.cleaned_data['heading']
                    path = 'media/uploads/'
                    if not os.path.exists(path):
                        os.makedirs(path)
                    dest = open(os.path.join(path + heading.name), 'wb+')
                    for chunk in heading.chunks():
                        dest.write(chunk)
                    dest.close()
        
                    userimg = ImgFile()
                    userimg.name = name
                    userimg.heading = heading
                    userimg.save()
                    print('上传成功')
                    return render(request, 'app1/upload_form.html', {'form_obj': f, 'user': userimg})
                else:
                    print(f.errors)

        路由

        re_path 配置了可以直接在浏览器访问对应的文件,

        from django.urls import path, include, re_path
        from django.views.static import serve
        from mywed import settings
            path('app1/userimg/', views.ingfileform),
            re_path('media/uploads/(?P.*)', serve,
                    {"document_root": settings.MEDIA_ROOT}),

        settings.py

        这里路径在项目文件中设置便于统一,在实际的应用中也应该多在公共文件中设置

        MEDIA_URL = "media/uploads/"
        MEDIA_ROOT = os.path.join(MEDIA_URL, "")

        Python Django框架中表单怎么使用

        db中也登陆了对应的信息

        Python Django框架中表单怎么使用

        模型表单

        Django提供了ModelForm可以直接和模型关联,省略了Form表单中定义的操作。

        AJAX

        模板文件,为了能够正常的访问,必须添加csrfmiddlewaretoken或者在视图函数中注释@csrf_exempt,建议使用第一种方式

        用户名:
        密码:
        {% csrf_token %}
        提交
        
        

        视图文件

        from django.views.decorators.csrf import csrf_exempt
        def ajax_login(request):
            return render(request, 'app1/ajax.html')
        
        
        # @csrf_exempt
        def ajax_login_data(request):
        
            if request.method == "GET":
                HttpResponse("内部自己的url")
            username = request.POST.get('username')
            password = request.POST.get('password')
            print(username)
            if username == 'admin' and password == '123456':
                return JsonResponse({
                    'code': 1,
                    'msg': "登陆成功"
                })
            else:
                print("222")
                return JsonResponse({
                    'code': 0,
                    'msg': "登陆失败"

        Python Django框架中表单怎么使用

        这里使用的是网上的jquery地址,也可在settings.py匹配如下,在网站根目录中创建static目录,放入jquery文件。

        STATIC_URL = '/statics/'
        
        STATICFILES_DIRS = [
            os.path.join(BASE_DIR, "statics"),
        ]
        本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
        作者最新文章
        编程开发 Python django
        相关文章 更多
        python删除一个列表里的重复元素的方法与代码示例
        python删除一个列表里的重复元素的方法与代码示例

        学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

        Python写接口的步骤及完整代码示例
        Python写接口的步骤及完整代码示例

        详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

        codex怎么读取word文档及docx文件操作教程
        codex怎么读取word文档及docx文件操作教程

        介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

        怎么在Python中调用C语言代码提升性能
        怎么在Python中调用C语言代码提升性能

        详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

        Python与C语言的性能差异及底层原理
        Python与C语言的性能差异及底层原理

        深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

        Python和C语言哪个更适合编程入门
        Python和C语言哪个更适合编程入门

        客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

        selenium上传文件教程本地文件路径设置方法
        selenium上传文件教程本地文件路径设置方法

        深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

        大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
        大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

        针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

        langgraph python guide中文入门教程详解
        langgraph python guide中文入门教程详解

        本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

        Windows 安装 Python:从官方入口到虚拟环境的可复现实践
        Windows 安装 Python:从官方入口到虚拟环境的可复现实践

        面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

        查看更多
        精品专题 更多
        装机必备
        装机必备

        正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

        Windows
        Windows

        正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

        PDF教程
        PDF教程

        正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

        Mac软件 更多
        讯飞智作 网页版
        讯飞智作 网页版
        Windows/ macOS/ Linux

        讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

        火山引擎 网页版
        火山引擎 网页版
        Windows/ macOS/ Linux

        火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

        Aperty macOS版
        Aperty macOS版
        macOS

        Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

        WINDOWS 更多
        讯飞智作 网页版
        讯飞智作 网页版
        Windows/ macOS/ Linux

        讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

        火山引擎 网页版
        火山引擎 网页版
        Windows/ macOS/ Linux

        火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

        PixTV 网页版
        PixTV 网页版
        Windows

        PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

        为什么要购买正版软件?
        01 官方授权

        授权来源透明,订单与许可信息可随时查询。

        02 即时交付

        付款成功后自动发放激活信息,支持订单追踪。

        03 中文协助

        安装、激活、迁移与续费问题都有专人响应。

        04 长期可用

        提供升级提醒与授权管理,换机时也能轻松迁移。

        网站备案号:苏ICP备2026018738号-1 联系邮箱:bd@zhengruan.com 网站地图

        Copyright ©2018-2026