【6.0】Django框架入门之静态文件

【一】静态文件配置说明

【1】模版文件

  • 我们将html文件默认都放在templates文件夹下

【2】资源文件

  • 我们将网站所使用的静态文件默认都放在static文件夹下

    静态文件:前段已经写好,能直接使用的文件
    	网站写好的JS文件
    	网站写好的CSS文件
    	网站用到的图片文件
    	第三方框架
    	...
    拿来直接就可以使用的文件
    
  • 一般情况我们再static文件夹下还会对文件进行划分

    • js文件夹
    • css文件夹
    • img文件夹
    • plugins文件夹
  • 在浏览器中输入url能够看到对应的资源

  • 是因为后端提前开设了相关的接口

  • 如果访问不到资源,说明后端没有开设相关资源的端口

【二】静态文件配置

【1】配置文件增加配置

(1)后端

  • settings.py 配置文件中增加如下配置
STATIC_URL = '/static/'  # 类似于访问静态文件的令牌

# 静态文件配置
# 默认查找位置是当前APP的目录下
# 这个配置定义了静态文件应用在启用 FileSystemFinder 查找器时将穿越的额外位置
STATICFILES_DIRS  = [
    os.path.join(BASE_DIR, 'static')
]

(2)前端

  • 在前端页面中增加如下配置,即可使用静态文件模版语法
{% load static %}
<img src="{% static 'my_app/example.jpg' %}" alt="My image">

【2】配置文件说明

  • 如果想要访问static静态文件,就必须以static开头
    • 如:/static/plugins/Bootstrap/js/bootstrap.js/bootstrap.min.js

【三】静态文件配置补充

【1】前缀

  • 如果你想用一个额外的命名空间来引用其中一个位置的文件,你可以 可选的 提供一个前缀作为 (prefix, path) 的元组
  • 例如:
STATICFILES_DIRS = [
    # ...
    ("downloads", "/opt/webfiles/stats"),
]
  • 例如,假设你将 STATIC_URL 设置为 '/static/',则 collectstatic 管理命令将收集 STATIC_ROOT'downloads' 子目录中的“stats”文件。
  • 这将允许你在你的模板中用 '/static/downloads/polls_20101022.tar.gz' 引用本地文件 '/opt/webfiles/stats/polls_20101022.tar.gz',例如:
<a href="{% static 'downloads/polls_20101022.tar.gz' %}">

【2】存储引擎

  • 默认: 'django.contrib.staticfiles.storage.StaticFilesStorage'
class StaticFilesStorage(FileSystemStorage):
    """
    Standard file system storage for static files.

    The defaults for ``location`` and ``base_url`` are
    ``STATIC_ROOT`` and ``STATIC_URL``.
    """
    def __init__(self, location=None, base_url=None, *args, **kwargs):
        if location is None:
            location = settings.STATIC_ROOT
        if base_url is None:
            base_url = settings.STATIC_URL
        check_settings(base_url)
        super().__init__(location, base_url, *args, **kwargs)
        # FileSystemStorage fallbacks to MEDIA_ROOT when location
        # is empty, so we restore the empty value.
        if not location:
            self.base_location = None
            self.location = None

    def path(self, name):
        if not self.location:
            raise ImproperlyConfigured("You're using the staticfiles app "
                                       "without having set the STATIC_ROOT "
                                       "setting to a filesystem path.")
        return super().path(name)
  • 使用 collectstatic 管理命令收集静态文件时要使用的文件存储引擎。

  • 在此配置中定义的存储后端的即用实例可以在 django.contrib.staticfiles.storage.staticfiles_storage 中找到。

  • 默认情况下,将查找存储在 STATICFILES_DIRS 配置中的文件(使用 django.contrib.staticfiles.finders.FileSystemFinder)和每个应用程序的 static 子目录中的文件(使用 django.contrib.staticfiles.finders.AppDirectoriesFinder)。如果存在多个同名文件,将使用第一个找到的文件。

  • 有一个查找器是默认禁用的: django.contrib.staticfiles.finders.DefaultStorageFinder。如果添加到你的 STATICFILES_FINDERS 配置中,它将在 DEFAULT_FILE_STORAGE 配置所定义的默认文件存储中查找静态文件。

【三】示例

【1】引言

  • 以登录注册功能为例
  • 我们之所以可以在浏览器地址栏中输入不同的路由访问到不同的资源
  • 是因为我们在后端框架中提前开设了相应的访问接口所以用户才能访问
  • 言外之意就是我们没有开设接口 那么肯定访问不到

【2】解决方案

(1)开始登陆页面接口

  • 开设接口返回登录界面

(2)登录页面渲染静态文件

  • 登录界面需要使用bootstrap并且还需要自己编写css和js
    • 这些文件就被称之为静态文件

(3)前端获取用户数据

  • 页面需要获取前端用户数据并且传递给后端
    • form表单
      • action参数:控制数据的提交地址
      • method参数:控制请求的提交方式

(4)访问登录页面

(5)开设静态资源接口

  • 理论上应该自己去路由层开设接口资源 但是由于静态文件资源使用频率很高
  • 只要是一个web项目都肯定需要
  • 所以django为了避免开发者繁琐
  • 提供了静态资源的配置文件
  • 只需要填写固定的配置即可开设资源接口
# 静态文件资源访问接口固定配置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
# html页面路径
  /static/mycss.css
posted @ 2024-02-27 08:24  Chimengmeng  阅读(137)  评论(0编辑  收藏  举报