django
版本:1.x 和 2.x不支持python2版本,1.x路由正则风格,2.x路由风格简单类似flask。不支持python2版本,只支持py3.5及以上版本。
优点:大而全。封装多种功能,开箱即用。目录结构适合中大型程序。缺点,内涵的功能有些用不上。
教程:投票应用
1.确认python版本和django版本安装。
python -m django --version
2.新建工程项目
django-admin startproject mysite
3.项目目录结构
根目录下manage.py启动服务的入口。跟项目同名的mysite文件夹下是主要项目代码。有的项目中这个文件夹又叫做app、sre。settings.py设置,urls.py路由。wsgi.py打包应用部署相关。models.pyORM相关的类,view.py业务逻辑。
4.启动项目
python manage.py runserver
5.生成应用
python manage.py startapp polls
project 是项目工程,app应用是项目中一个功能模块。polls目录下migraions是sql迁移脚本,admin.py后台的插件,apps.py,models.py定义表结构的类,tests.py单元测试,views.py业务逻辑和HTML渲染。
流程
浏览器请求url → mysite/urls.py →polls/urls.py → polls/views.py → 返回响应浏览器展示
报错
1.安装django时报目录权限错误。解决使用管理员powershell pip安装。
2.代码修改后未生效,服务器无log原因进程未正常退出。解决 改端口或任务管理器中结束所有python.exe
3.getaddress函数报错。原因,计算机别名为中文
pip install django
import django
python -m django --version
2.1.4
\mysite>python manage.py runserver
时间
场景:你的网站世界用户都可以访问。网站上线圣诞节活动,0点到24点结束,本国人正常,外国人访问发现活动开始和结束时间提前或延后。
背景知识:
TIME_ZONE=‘UTC’
USE_TZ=True
不带时区的时间aware_time,带时区的时间local_time(本地时间)。
GMT、UTC(世界调和时)。中国东8区 UTC+8.
python内置的datetime包 now生成本地时间
如果网站只有国内访问,USE_TZ应该设置为False,时间可以由datetime包生成,存储在数据库的是不带时区的本地时间。
为了避免上面提到的场景,django的解决方案是。基于三方包朋友time_tz,由time_zone()生成带时区的时间。根据TIME_ZONE设置转换UTC时间存入数据库,html渲染时从取出UTC时间,根据访问者的时区转换成访问者当地的时间。
最佳实践:
1.国内访问。USE_TZ=False TIME_ZONE=‘UTC’ datetime.now() time_zone()都行
如果网站多国访问,USR_TZ应该设置为Ture TIME_ZONE=‘Asia/Shanghai’ time_zone()
可能出现的错误:
前台页面时间比实际早8小时,原因USE_TZ=False TIME_ZONE=‘Asia/Shanghai’
i18n
i18n意味国际化,网站上的菜单不同国家人访问展示不同的语言。原理有个翻译的配置文件。
I18N = TR