美文网首页
9.表单提交以及文件上传

9.表单提交以及文件上传

作者: 爱修仙的道友 | 来源:发表于2019-03-08 14:18 被阅读0次

表单提交

在HTML中,form表单的作用是收集标签中的内容,<form>...</form> 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端。

一个表单必须指定两样东西:

  1. form的method参数用于设置表单的提交方式,默认使用POST. 注意需加 {% csrf_token %}
  2. action用于设置表单的提交url,如果不写或者保持空字符串,那么将使用当前的URL.
  <form action="" method="post">
    {% csrf_token %}
    <p>用户名:<input type="text" name="username" placeholder="请输入用户名"></p>
    <p>密码:<input type="password" name="password" placeholder="请输入密码"></p>
    <p><input type="submit" value="登陆"></p>
  </form>
  • GET 方式获取参数
  1. get提交的参数会在url中显示.
  {#前端代码#}
  <h1>登陆</h1>
  <form action="" method="post">
    {% csrf_token %}
    <p>用户名:<input type="text" name="username" placeholder="请输入用户名"></p>
    <p>密码:<input type="password" name="password" placeholder="请输入密码"></p>
    <p><input type="submit" value="登陆"></p>
  </form>
image.png
  1. 可以通过request.GET.get的方法来获取提交的参数.
# views.py
class Login(View):

    def get(self, request):
        username = request.GET.get('username', '')
        password = request.GET.get('password', '')
        print('用户名:{}  密码:{}'.format(username,password))
        return HttpResponse('登陆成功')
# urls.py
from django.urls import path, re_path
from . import views

app_name = 'index'


urlpatterns = [
    path('home/', views.Index.as_view(), name='home'),
    path('login/', views.Login.as_view(), name='login'),

]
# 后台数据返回
用户名:liuwei  密码:123456
[08/Mar/2019 11:18:54] "GET /login/?username=liuwei&password=123456 HTTP/1.1" 200 12
  • POST 方式获取参数
  1. post提交的参数,会通过body参数传递给服务器
  {#前端代码#}
  <h1>登陆</h1>
  <form action="" method="post">
    {% csrf_token %}
    <p>用户名:<input type="text" name="username" placeholder="请输入用户名"></p>
    <p>密码:<input type="password" name="password" placeholder="请输入密码"></p>
    <p><input type="submit" value="登陆"></p>
  </form>
image.png
  1. 可以通过request.POST.get的方法来获取提交的参数.
# views.py
class Login(View):

    def get(self, request):
        return render(request, 'login/login.html')

    def post(self, request):
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        print('用户名:{}  密码:{}'.format(username, password))
        return HttpResponse('登陆成功')

# urls.py
from django.urls import path, re_path
from . import views

app_name = 'index'


urlpatterns = [
    path('home/', views.Index.as_view(), name='home'),
    path('login/', views.Login.as_view(), name='login'),

]
# 后台数据返回
用户名:liuwei  密码:123456789q
[08/Mar/2019 11:24:20] "POST /login/ HTTP/1.1" 200 12
  • 一键多值的getlist方法:
    request对象的属性GET、POST都是QueryDict类型的对象,与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
    • 方法get():
      根据键获取值,只能获取键的一个值
      如果一个键同时拥有多个值,获取最后一值
    • 方法getlist():
      根据键获取值将键的值以列表返回
      可以获取一个键的多个值
    • 举例:
    <p>用户名:<input type="text" name="username" placeholder="请输入用户名"></p>
    <p>用户名:<input type="text" name="username" placeholder="请输入用户名"></p>
    username = request.POST.getlist('username', '')
    print('用户名:{}  '.format(username))

    # 后台返回信息
    用户名:['liuwei', 'weige']

文件上传

Django在处理文件上传的时候,文件数据被保存在了request.FILES
FILES中的每个键为<input type="file" name="" />中的name

  • 设置文件的存储路径
# 1.在项目根目录下files文件夹
# 2.图片上传后,会被保存到“/files/文件”
# 3.打开settings.py文件,增加FILES_ROOT项
FILES_ROOT = os.path.join(BASE_DIR, 'files')
  • FILES只有在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象
  {#前端代码#}
  <h1>上传文件</h1>
  <form action="" method="post" enctype="multipart/form-data" >
    {% csrf_token %}
    {# multiple 允许多个文件上传 #}
    <input type="file" name="file" multiple>
    <p><input type="submit" value="上传" ></p>
  </form>
# views.py
class UpLoadFiles(View):

    def get(self, request):
        return render(request, 'login/login.html')

    def post(self, request):
        files = request.FILES.getlist('file', None)
        day_dir = datetime.now().strftime('%Y%m%d')
        pre_dir = os.path.join(FILES_ROOT, day_dir)
        if not os.path.exists(pre_dir):
            # 要判断是否有权限创建该文件夹
            os.mkdir(pre_dir)
        for file in files:
            file_name = os.path.join(pre_dir, file.name)
            with open(file_name,'wb') as f:
                # 数据流传输数据
                for line in file.chunks():
                    f.write(line)
        return HttpResponse('上传成功')
# urls.py
from django.urls import path
from . import views

app_name = 'index'

urlpatterns = [
    path('upload/', views.UpLoadFiles.as_view(), name='upload'),
]
  • 展示


    image.png

相关文章

  • 9.表单提交以及文件上传

    表单提交 在HTML中,form表单的作用是收集标签中的内容, ... 中间可以由访问者添加类似于文本,选择,或...

  • 同步表单提交和异步表单提交以及提交前的预览

    一、传统表单提交(同步上传) 先来复习一下 form 表单提交上传文件: 上传文件时表单必须加:encType =...

  • axios学习笔记

    一、axios的基本使用 get,获取数据 post,提交数据(表单提交以及文件上传) put,更新数据 (提交所...

  • 使用springMVC实现文件上传

    简单思路 导入文件上传依赖组件 注册文件上传组件 在springmvc配置文件中加入 修改前端表单提交方式以及请求...

  • 第十六章 文章上传和下载

    文件上传 多数文件上传都是通过表单形式提交给后台服务器,因此,要实现文件上传,就要提供一个文件上传的表单,而该表单...

  • form表单和ajax文件上传

    通过传统的form表单提交的方式上传文件: 名称 文件 不过传统的form表单提交会导...

  • AngularJs实现表单文件上传

    AngularJs实现表单文件的上传 一:传统的表单提交方式 二: angularjs处理文件上传 因为是通过an...

  • Django-28 文件上传

    上传规范-前端[HTML] 文件上传必须为POST提交方式表单 中文件上传时必须带有enctype='multip...

  • WTForms 字段 参数 校验

    常用字段 常用参数 常用校验 文件上传 表单提交属性 表单处理流程

  • 文件上传

    加入依赖 提交表单 代码 传统的文件上传 Spring文件上传 使用文件解析器确定上传文件对象,再将上传的文件项M...

网友评论

      本文标题:9.表单提交以及文件上传

      本文链接:https://www.haomeiwen.com/subject/hrolpqtx.html