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 %} {{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'),
]