核心提示: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