Django基础知识整理(二)--路由-反解析-配置文件-静态文件

路由命名与反解析

路由命名

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

  1. 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如;
re_path(r'^users/', include('users.urls', namespace='users')), 

命名空间表示,凡是users.urls中定义的路由,均属于namespace指明的users名下。
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。

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

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



这里再讲一下路由设置中的include参数

include(("users.urls","users"), namespace="users")
 #设置应用url路由文件路径和 app_name.
 #没有设置的namespace与app_name属性同名. 
#格式如下
 urlpatterns = [ 
 	path('admin/', admin.site.urls), 
 	path('users/', include(('users.urls','users')))
 ]

django2.X中, 在include模块里, 重新规定了输入规范,app_name应用名称必须填写。
include要求的三个参数:
urlconf_module,url文件路径
app_name,包名
namespace,命名空间
书写格式为:
include((urlconf_module,app_name),namespace)
urlconf_module,app_name包含在第一个参数的元组中, 第二参数namespace则应是字符串。

三个属性中: urlconf_module和app_name必须传入,app_name可以在父url文件传入也可在子url文件单独定义.
namespace, 可传可不传,不可以只传入namespace!
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。在定义普通路由时,可以使用name参数指明路由的名字,如:

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

reverse反解析

反解析主要是在前后端不分离的项目中会使用到,在前后端分离的项目中不会使用,使用reverse函数,可以根据路由名称,返回具体的路径,如:

from django.urls import reverse # 注意导包路径 
def index(request): 
	return HttpResponse("hello the world!") 

def say(request): 
	url = reverse('users:index') # 返回 /users/index/ 
	print(url) 
	return HttpResponse('say')
对于未指明namespace的,reverse(路由name)
对于指明namespace的,reverse(命名空间namespace:路由name)

配置文件

settings.py文件中:

1. BASE_DIR

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

当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径。

2. DEBUG

调试模式,创建工程后初始值为True,即默认工作在调试模式下。

作用:
修改代码文件,ctrl + s保存时,程序自动重启

Django程序出现异常时,向前端显示详细的错误追踪信息,例如:
在这里插入图片描述

而非调试模式下,仅返回Server Error (500)

注意:部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False

3. 本地语言与时区

Django支持本地化处理,即显示语言与时区支持本地化。

本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化,中国大陆地区使用简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示。

初始化的工程默认语言和时区为英语和UTC标准时区

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

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

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

本来啥都不改启动一个空项目,效果是这样的:
在这里插入图片描述

改完之后,重启一个空项目会发现火箭下的字体由英文变成中文:
在这里插入图片描述
下面的USE_TZ = True最好注释掉:
在这里插入图片描述
Django 默认关闭时区支持,开启时区支持,需要在 settings 中设置 USE_TZ = True 。最好同时安装pytz 模块( pip install pytz ) 。Django 的 settings.py 中与时间相关的设置

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True

当设置了 TIME_ZONE 则 Django(Django 默认的 TIME_ZONE = ‘America/Chicago’ 或 system 时区)
将使用指定的时区,它将影响 datetime.locale、now()等函数的返回值。
当设置了 USE_TZ 为 True 时,Django 与其他系统或服务的交流将强制使用 UTC 时间。

可能踩的坑:

当 USE_TZ=True 时,把时间存储到数据库的时候 “INSERT INTO table_name VALUES(‘datetime_str’ 或 datetime实例)” Django 将会把 ‘datetime_str’ 和 datetime 实例转换为 UTC 时间。由于MySQL 的
datetime 类型字段对时区是无感知的,所以会直接存储由 Django 传递过去的 UTC 形式的时间。在中国,这个问题表现为存储到数据库里面的时间会晚8个小时。
解决方法:dt.replace(tzinfo=pytz.utc),也就是在存储前将 datetime 的时区信息改为 UTC。
或者注释掉USE_TZ = True

静态文件

项目中的html、CSS、图片(jpg,png等)、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径。静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。

为了提供静态文件,需要在settings.py里配置两个参数:

STATIC_URL 访问静态文件的URL前缀,默认’/static/’,一般在settings.py文件的最后一行:
在这里插入图片描述

STATICFILES_DIRS 存放查找静态文件的目录,这个东西需要自己添加

示例:
1.在项目根目录下创建static_files目录来保存静态文件:
在这里插入图片描述

2.在demo/settings.py中修改静态文件的两个参数为

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_files'),
]

3.此时在static_files添加的任何静态文件都可以使用网址 /static/文件在static_files中的路径 来访问了。

例如,我们向static_files目录中添加一个1.jpg文件
在这里插入图片描述

在浏览器中就可以使用127.0.0.1:8000/static/1.jpg来访问:
在这里插入图片描述

或者我们在static_files目录中添加了一个子目录和文件a/2.jpg,在这里插入图片描述
在浏览器中就可以使用127.0.0.1:8000/static/a/2.jpg来访问:
在这里插入图片描述

注意Django 仅在调试模式下(DEBUG=True)能对外提供静态文件。 当DEBUG=False工作在生产模式时,Django不再对外提供静态文件,需要是用collectstatic命令来收集静态文件并交由其他静态文件服务器来提供。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰履踏青云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值