核心提示:Nginx+WSGI生产环境static文件解决这是 开发环境 配置这是 生产环境 配置supervisor来管理进程不使用media_url时,自定义上传目录由于我在项目上传中使用的自定义上传目录(...
Nginx+WSGI生产环境static文件解决
这是 开发环境 配置
这是 生产环境 配置
supervisor来管理进程
不使用media_url时,自定义上传目录
由于我在项目上传中使用的自定义上传目录(因为没看Field类文档就建了Models)
class ProjPublishView(Staff_test,FormView):
template_name="www/proj_publish_base.html"
form_class=ProjForm
absolute_path='/virEnv/mysite/www/static/'
def form_valid(self,form):
if form.is_valid():
data=form.cleaned_data
title=data['title']
abstract=data['abstract']
uploaded=datetime.datetime.now()
gitURL=data['gitURL']
imgsURL='www/projImgs'
proj=tb_projs(title=title,abstract=abstract,uploaded=uploaded,imgsURL=imgsURL,gitURL=gitURL)
proj.save()
img1_path=self.absolute_path+imgsURL+'/'+str(proj.projID)+'_1.jpg'
self.handle_uploaded_img(self.request.FILES['img1'],img1_path)
img2_path=self.absolute_path+imgsURL+'/'+str(proj.projID)+'_2.jpg'
self.handle_uploaded_img(self.request.FILES['img2'],img2_path)
img3_path=self.absolute_path+imgsURL+'/'+str(proj.projID)+'_3.jpg'
self.handle_uploaded_img(self.request.FILES['img3'],img3_path)
img4_path=self.absolute_path+imgsURL+'/'+str(proj.projID)+'_4.jpg'
self.handle_uploaded_img(self.request.FILES['img4'],img4_path)
img5_path=self.absolute_path+imgsURL+'/'+str(proj.projID)+'_5.jpg'
self.handle_uploaded_img(self.request.FILES['img5'],img5_path)
return super(ProjPublishView,self).form_valid(form)
def handle_uploaded_img(self,f,path):
with open(path,'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def get_success_url(self):
#success_url=reverse('www:projList',kwargs={'page':1})
success_url=reverse('www:indexView')
return success_url
我打算加个if settings.DEBUG的判断,DEBUG的上传到一个目录,生产环境中的就上传到django的那个collected_static下。
然后就搞定了,网上很多参考写的都是开发环境的配置,原理就是给static文件添加一个static的url映射,这在用python manage.py runserver 0:8000的时候(开发环境)是由django框架自动完成的,
换到uwsgi后(生产环境)他们就手动加上去了这个url映射,但是django的文档上说了这可能是不安全的。
在生产环境中我们使用nginx来跳转获取static文件,因此使用python manage.py collectstatic把项目下的static目录下的文件都统一收集到STATIC_ROOT定义的文件夹里,然后nginx把/static 的url跳转到汇集的那个文件夹。
还有重要的一部就就是uwsgi和nginx通过sock连接,这样实现了动态部分(views,modles,…)使用uwsgi转发url,静态部分(css,js,imgs…)使用nginx来转发url


