当前位置:

首页 > 编程开发 > 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"),
      ]
      本文内容来源于互联网,如有侵权请联系删除。
      作者最新文章
      编程开发 Python
      相关文章 更多
      Python安装后怎么打开:使用IDLE或命令行启动解释器
      Python安装后怎么打开:使用IDLE或命令行启动解释器

      刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

      Windows系统Python安装教程:下载、勾选PATH及环境变量配置
      Windows系统Python安装教程:下载、勾选PATH及环境变量配置

      针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

      麒麟OS如何查看Python进程的运行状态
      麒麟OS如何查看Python进程的运行状态

      要想确认麒麟OS中Python程序的运行状态以及资源占用情况,我们可以这样做:用ps -ef | grep python来筛选进程;通过top命令,按P键排序查看实时负载;使用pgrep -f "script.py"精准获取PID;借助lsof -p PID验证文件打开状态。另外,还可以结合syst

      Python在Debian上如何配置SSL证书
      Python在Debian上如何配置SSL证书

      在Debian系统上配置SSL证书通常涉及以下几个步骤:安装Web服务器:首先,你需要一个Web服务器,比如Apache或Nginx。这里以Apache为例。sudo apt updatesudo apt install apache2获取SSL证书:你可以从Let’s Encrypt免费获取SSL

      统信UOS怎么安装Python开发环境
      统信UOS怎么安装Python开发环境

      要想让Python项目在统信UOS上正常运行,得先安装python3、python3-pip、python3-venv、python3-dev以及build-essential等组件。具体操作就是执行sudo apt install命令来一步到位完成安装,同时别忘了配置清华镜像源来给pip加速哦。在

      纯Python方案实现中英文全文搜索
      纯Python方案实现中英文全文搜索

      在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点搜索,大到搜索引擎搜索。从简单的来说,搜索功能确实很简单,一个简单的select语句就可以实现数据的搜索。而从复杂的来看,无论是搜索的精度还是搜索的效率,都是有很深的研究范围的。对于简单的搜索功能来说,一个s

      Mac如何取消通过Python脚本运行的关机程序
      Mac如何取消通过Python脚本运行的关机程序

      立即在终端输入sudo shutdown -c取消倒计时关机,成功后显示“Shutdown cancelled”;若存在pmset重复任务,需再执行sudo pmset repeat cancel清除。Mac因Python脚本执行了os.system("sudo shutdown -h +10")或

      Pythonasyncio异步并发与多固定出口IP调度实战
      Pythonasyncio异步并发与多固定出口IP调度实战

      之前写过一篇同步场景下用 Python 管理多个固定出口 IP 的实践(ExitPool + requests/httpx),覆盖了健康检查、故障转移和连接池复用。但在实际业务中,越来越多的场景用 asyncio 做高并发采集或批量接口调用——异步事件循环下多出口的管理方式和同步场景完全不同:单线程

      Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换
      Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换

      写在前面:为什么静态出口 IP 不是"买了就行"不少团队在引入静态出口 IP 产品时,第一反应往往是:“地址配上去,这事就算完了。”可真到了真实业务里,静态出口 IP 真正能体现价值的地方,往往不在分配这一步,而在分配之后怎么管:地址有没有漂移,质量是否达标,某一条线路突然不可用时怎么切换,连接层又

      using namespace 使用中遇到的问题怎么解决
      using namespace 使用中遇到的问题怎么解决

      命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

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

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

      Windows
      Windows

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

      macOS软件
      macOS软件

      正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

      Mac软件 更多
      灵活计算器
      灵活计算器
      macOS/iOS/Android

      灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

      赤友清理大师
      赤友清理大师
      macOS

      赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

      极度公式
      极度公式
      Windows/macOS/Linux

      极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

      WINDOWS 更多
      Windows 10
      Windows 10
      Windows

      Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

      极度公式
      极度公式
      Windows/macOS/Linux

      极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

      密码键盘
      密码键盘
      Windows/macOS/iOS/Android

      密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

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

      Copyright ©2018-2026