您现在的位置:首页 >> 前端 >> 内容

Nginx+WSGI生产环境static文件解决

时间:2017/7/7 10:33:13 点击:

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

Tags:NG GI IN NX 
作者:网络 来源:geekcug的博客