How to return static files passing through a view in django?

前端 未结 8 1800
名媛妹妹
名媛妹妹 2020-12-09 09:04

I need to return css files and js files according to specific logic. Clearly, static serve does not perform what I need. I have a view, whose render method uses logic to fin

8条回答
  •  独厮守ぢ
    2020-12-09 09:56

    What webserver software are you using?

    At least for Apache and NginX, there is a module enabling you to use the X-SendFile HTTP header. The NginX website says Lighty can do this, too.

    In your wrapper view:

    ...
    
    abspath = '/most_secret_directory_on_the_whole_filesystem/protected_filename.css'
    
    response = HttpResponse()
    response['X-Sendfile'] = abspath
    
    response['Content-Type'] = 'mimetype/submimetype'
    # or let your webserver auto-inject such a header field
    # after auto-recognition of mimetype based on filename extension
    
    response['Content-Length'] = 
    # can probably be left out if you don't want to hassle with getting it off disk.
    # oh, and:
    # if the file is stored via a models.FileField, you just need myfilefield.size
    
    response['Content-Disposition'] = 'attachment; filename=%s.css' \
        % 'whatever_public_filename_you_need_it_to_be'
    
    return response
    

    Then you can connect the view via http://mysite.com/url_path/to/serve_hidden_css_file/.

    You can use it anytime you need to do something upon a file being requested that should not be directly accessible to users, like limiting who can access it, or counting requests to it for stats, or whatever.

    For Apache: http://tn123.ath.cx/mod_xsendfile/
    For NginX: http://wiki.nginx.org/NginxXSendfile

提交回复
热议问题