Django 遇见的一些坑,文件上传 POST urls
其实也不算是坑吧,有官方文档,只不过没看明白,
先转载一下借鉴一下常见的问题
Django常见错误总结: 细数我们一起走过的大坑
Django中使用mysql数据库并使用原生sql语句操作
Django中使用mysql数据库这个到目前为止,我也没搞明白,我是开发PHP的 一时好奇就看了一下
1.坑一
文件上传POST 第一开始文件上传一直提示我GBK
然后我就纳闷了, 啥玩意,后来 百度我才发现是字符集问题
最后在头部声明 # coding: utf-8 或者 # -- coding: UTF-8 --。 然后问题才解决
在跳转到提交页面,后面要加 name
2.坑二
文件添加的话 腰子from 表单里面写上 enctype=“multipart/form-data”
<form action="/search" method="post" enctype="multipart/form-data">
<!-- {% csrf_token %} -->
<input name="qs"type="text" >
<input name="sqs"type="text" >
<input name="files" type="file">
<input type="submit" value="submit">
</form>
写入这句话之后发现 接收不到POST的数据了, 百度了一下需要,上传图片和文件时,模板中form一定加enctype="multipart/form-data“属性, 同时视图中别忘了加request.FILES, 如form =UploadForm(request.POST, request.FILES)。
或者 关闭.csrf功能
在settings.py 里面
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
我是选择了关闭了csrf 然后就可以成功接收数据; 了
def search(request):
request.encoding='utf-8'
context = request.FILES.get("files", None)
destination = open("static/" + context.name, 'wb+')
for x in context.chunks():
destination.write(x)
return HttpResponse('ok')
# else :
# message = '未知数据提交'
# return HttpResponse(message)
3.坑三
调用静态文件
在settings.py文件家里面设置
STATIC_URL = '/static/'
# STATIC_ROOT = os.path.join(BASE_DIR,'static')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "templates"),
os.path.join(BASE_DIR, "static"),
)
文件结构
然后需要在视图层调用, 调用方法
<img style="width:50px" src="static/lo.jpg" alt="">
static是 文件 然后 lo.jpg是底下下的文件 还有一种调用方法是 {% STATIC_URL %},我不好使,可能是我不会配置, 有会的话就 下面评论吧 一起学习
4.坑④
视图渲染 视图渲染一定要在 settings.py 写啥文件名字
‘DIRS’: [BASE_DIR+"/templates",], templates这是我的视图文件名字,你们要改成你们的
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR+"/templates",],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
最后就是 urls.pt
from django.conf.urls import url
# from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import view
from django.urls import path
urlpatterns = [
url(r'^test$', view.hello),
# url(r'^search$', view.search),
path("search", view.search,name="search"),
# url(r'^search',view.search,name='search'),
# staticfiles_urlpatterns(),
]
path调用的是python第三方模块或框架,而url则是自定义的模块
1.x版本用url,2.x版本用path
url(r’^index/$’,views.index),
path(‘index/’,views.index),
页面 跳转 携带参数重定向
重定向
from django.http import HttpResponseRedirect
def hello(request):
return HttpResponseRedirect('跳转地址') #跳转到主界面
#如果需要传参数
return HttpResponseRedirect('/commons/index/?message=error')
HTML 跳转
<a href="/axf/login/">登陆</a>
或者
<a href="{% url 'axf:login' %}">登陆</a>
转载
Django中多种重定向方法使用
Django页面跳转
这是目前所遇见的问题 可以吧问题评论到评论区 我们一起交流!!!111