Django表单

Django表单

用Django对用户提交的表单数据进行处理


一、get请求

1.在项目的templates下新建search.html,构建用户请求表单

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>表单搜索</title>
</head>
<body>
    <form action="/search" method="get">
        <input type="text" name="search">
        <input type="submit" value="搜索">
    </form>
</body>
</html>

2.在项目中新建一个search.py(index.py)同级

from django.shortcuts import render
from django.http import HttpResponse

# 请求页面
def search_view(request):
    return render(request, 'search.html')
 
# 接收请求数据
def search(request):  
    request.encoding='utf-8'
    if 'search' in request.GET and request.GET['search']:
        message = '搜索内容: ' + request.GET['search']
    else:
        message = '搜索内容为空'
    return HttpResponse(message)

3.在urls.py中增加下列代码

from django.contrib import admin
from django.urls import path
from .index import content
from .index import lists
from .index import add_content
from .search import search_view
from .search import search

urlpatterns = [
    path('admin/', admin.site.urls),
    path('content', content),
    path('lists', lists),
    path('add_content', add_content),

    #表单搜索 - get请求
    path('search_view', search_view),
    path('search', search),
]

4.请求链接http://127.0.0.1:8000/search_view
在这里插入图片描述
在这里插入图片描述

二、post请求(使用一个接口处理)

1.新增一个search_post.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>POST搜索</title>
</head>
<body>
    <form action="/search_post" method="post">
        {% csrf_token %}
        <input type="text" name="search">
        <input type="submit" value="搜索">
    </form>
    <p>搜索结果:</p>
    <p>{{ result }}</p>
</body>
</html>

表格后面的 {% csrf_token %} 标签作用:防止伪装提交请求
用result标记表单处理结果

2.在search.py中增加代码

# POST请求
def search_post(request):
    res ={}
    if request.POST:
        res['result'] = request.POST['search']
    return render(request, "search_post.html", res)

3.更新urls.py

from django.contrib import admin
from django.urls import path
from .index import content
from .index import lists
from .index import add_content
from .search import search_view
from .search import search
from .search import search_post

urlpatterns = [
    path('admin/', admin.site.urls),
    path('content', content),
    path('lists', lists),
    path('add_content', add_content),

    #表单搜索 - get请求
    path('search_view', search_view),
    path('search', search),

    #表单搜索 - post请求
    path('search_post', search_post),
]

4.请求链接http://127.0.0.1:8000/search_post
在这里插入图片描述
在这里插入图片描述

三、请求判断

#请求方式需大写
if request.method == 'GET':
    #处理代码
elif request.method == 'POST':
    #处理代码

四、表单上传

1.html代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
    <form action="/upload_file" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="myfile">
        <button type="submit">Upload</button>
    </form>
</body>
</html>

2.接口代码

def upload_file(request):
    if request.POST:
        # 检查是否有上传的文件
        if 'myfile' in request.FILES:
            myfile = request.FILES['myfile']
            
            # 可以在这里添加文件校验逻辑
            
            # 保存文件到服务器 创建文件存储路径
            file_path = os.path.join(settings.MEDIA_ROOT, myfile.name)
            
            # 保存文件到路径
            with open(file_path, 'wb+') as destination:
                for chunk in myfile.chunks():
                    destination.write(chunk)
            
            # 返回成功响应
            message = '上传成功'
            return HttpResponse(message)
        else:
            # 如果没有文件,返回错误或其他逻辑
            message = '上传失败'
            return HttpResponse(message)
    return render(request, "upload_file.html")

3.更新urls.py

from django.contrib import admin
from django.urls import path
from .index import content
from .index import lists
from .index import add_content
from .search import search_view
from .search import search
from .search import search_post
from .search import upload_file

urlpatterns = [
    path('admin/', admin.site.urls),
    path('content', content),
    path('lists', lists),
    path('add_content', add_content),

    #表单搜索 - get请求
    path('search_view', search_view),
    path('search', search),

    #表单搜索 - post请求
    path('search_post', search_post),

    #上传文件
    path('upload_file', upload_file),
]

4.请求链接http://127.0.0.1:8000/upload_file
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、静态资源配置

在项目根目录下创建 statics 目录(注意这里带了s,不能直接用static)
在 settings 文件的最下方配置添加以下配置

STATIC_URL = 'static/'  # 别名 这里的别名没有带s,所以在引入的时候要注意使用不带s的
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "statics"), # 修改位置(这里需要在头部增加一行 import os,不然会报错)
]

在 statics 目录下创建 css 目录,js 目录,images 目录,plugins 目录, 分别放 css文件,js文件,图片,插件
把 bootstrap 框架放入插件目录 plugins
在 HTML 文件的 head 标签中引入 bootstrap
示例:

在模板中使用需要加入 {% load static %} 代码
{% load static %} {{name}}<img src="{% static 'images/runoob-logo.png' %}" alt="runoob-logo">

注意:在 Django 3.1 及更高版本中,url 函数已经被弃用,取而代之的是 path 和 re_path 函数

from django.contrib import admin
from django.urls import path
from .index import content
from .index import lists
from .index import add_content
from .search import search_view
from .search import search
from .search import search_post
from .search import upload_file

urlpatterns = [
    path('admin/', admin.site.urls),
    path('content', content),
    path('lists', lists),
    path('add_content', add_content),

    #表单搜索 - get请求
    path('search_view', search_view),
    path('search', search),

    #表单搜索 - post请求
    path('search_post', search_post),

    #上传文件
    path('upload_file', upload_file),

    # re_path(r'upload_file', upload_file, name='upload_file'),
]
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值