zoukankan      html  css  js  c++  java
  • 配置,静态文件和路由说明

    配置文件

    BASE_DIR
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

    这个获取到的路径是跟manage.py同级

    本地语言和时区

    LANGUAGE_CODE = 'en-us'  # 语言
    TIME_ZONE = 'UTC'  # 时区

    将语言和时区修改为中国大陆信息

    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'

    静态文件

    为了提供静态文件,需要配置两个参数:

    • STATICFILES_DIRS 存放查找静态文件的目录
    • STATIC_URL 访问静态文件的URL前缀

    例如

    manage同级下面创建一个文件夹static_files

    在配置文件settings.py中修改配置信息如下

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static_files'),
    ]
     
    例如我们在static_files 新建一个index.html文件
    image

    我们就可以在浏览器中127.0.0.1:8000/static/index.html来访问。

    image

    或者我们在static_files目录中添加了一个子目录和文件goods/detail.html,在浏览器中就可以使用127.0.0.1:8000/static/goods/detail.html来访问。

    路由

    1.路由顺序解析

    django在接收到一个请求的时候,从主路由文件中的urlpatterns列表中以由上至下的顺序查找对应路由规则,如果发现规则为include包含,则再进入被包含的urls中的urlpatterns列表由上至下进行查询。

    值得关注的由上至下的顺序,有可能会使上面的路由屏蔽掉下面的路由,带来非预期结果。例如:

    urlpatterns = [
        url(r'^say', views.say),
        url(r'^sayhello', views.sayhello),
    ]

    即使访问sayhello/路径,预期应该进入sayhello视图执行,但实际优先查找到了say路由规则也与sayhello/路径匹配,实际进入了say视图执行。

    解决办法

    在路由后面加个/$,如下

    urlpatterns = [
        url(r'^say/$', views.say),
        url(r'^sayhello/$', views.sayhello),
    ]

    2.路由命名和reverse反解析(逆向)

    2.1 路由命名(命名空间, namespace, name)

    在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。

    1) 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如

    drf_django/urls路由下

    url(r'^users/$', include('users.urls', namespace='users')),

    意思就是凡是users.urls中定义的路由,反向解析全部指定到users下

    作用是避免使用了相同的url名字,发生冲突,使用命名空间区别开

    2) 定义普通路由时,可以使用name参数指明路由的名字,如

    urlpatterns = [
        url(r'^index/$', views.index, name='index'),
        url(r'^say/$', views.say, name='say'),
    ]

    name没有作用域,在反解URL时,进行全局顺序搜索查找到第一个name指定URL时立即返回,我们在开发项目时,会经常使用name属性反解出URL,当不小心定义相同的name时,可能会导致URL反解错误,这时就引入了命名空间

    总结:当在普通路由下指定了name,我们在反解析路由地址的时候,比如有多个app,每个app下name都指定了index,这时就引入了命名空间 也就是namespace,来进行区分,为下面反解析铺垫。

    2.2 reverse(反解析)

    使用reverse函数,可以根据路由来返回具体的路径。

    from django.urls import reverse
    
    
    def index(request):
        """
        index视图
        :param request:包含了请求信息的请求对象
        :return:响应对象
        """
        return HttpResponse('hello the word!!')
    
    
    def say(request):
        url = reverse('users:index') # /users/index/
        print(url)
        return HttpResponse('say')

    总结:

    • 对于未指明namespace的,reverse(路由name)
    • 对于指明namespace的,reverse(命名空间namespace:路由name)

    3 路径结尾/的说明

    urlpatterns = [
        url(r'^index/$', views.index, name='index'),
    ]

    定义URL的时候我们通常以/$结尾,用户访问的时候不加/,Django会把用户重定向到以斜线/结尾的路径上,而不会返回404不存在

    总结:

    用户访问 index 或者 index/ 网址,均能访问到index视图。

  • 相关阅读:
    .Net开源微型ORM框架测评
    使用SQL-Server分区表功能提高数据库的读写性能
    C# 打印PDF文档的10种方法
    使用SQL-Server分区表功能提高数据库的读写性能
    oracle查看执行最慢与查询次数最多的sql语句及其执行速度很慢的问题分析
    Oracle中取日斯的sql语句
    高并发系统设计(二十六):【配置中心】成千上万的配置项要如何管理?
    高并发系统设计(二十五):【压力测试】怎样设计全链路压力测试平台?
    高并发系统设计(二十四):服务端监控要怎么做?
    minio搭建对象存储服务
  • 原文地址:https://www.cnblogs.com/py-web/p/10900541.html
Copyright © 2011-2022 走看看