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

2019-03-08  本文已影响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>
  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
  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
    <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')
  {#前端代码#}
  <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'),
]
上一篇 下一篇

猜你喜欢

热点阅读