1. Django开发前景
1.1 Django的厉害之处在python中,与web开发环境相关的包有 13045 个
django就占了 9091 个,大约70%,所以django占领了python的web开发70%市场
在python中,活跃的web框架多达 54 个,其中最活跃的有, Django , Flask , Pyramid , Zope
最受欢迎的就是 Django ,没有之一
超过 5263 个中大型网站使用Django开发
1.2 哪些公司在使用Django?国内:豆瓣、知乎
国外:Instagram、Mozilla、Pinterest
2、版本
2.0主要在一下方面做了改进:
简化url路由语法
更友好的admin站点
auth支持更高强度的加密算法(PBKDF2)
runserver支持HTTP 1.1
3.项目配置
3.1 git的使用 git的大致流程git的相关命令
确保git能将代码更新到github或者码云
3.2 环境安装建议虚拟环境,使用 linux系统 开发
mk Virtual env -p /usr/bin/python3.6 环境名称
安装django pip install django
3.3 新建项目django-admin startproject name name是项目的名字
生成的目录
manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
settings.py: 该 Django 项目的设置/配置。
urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
3.4 在项目同级新建app文件夹创建和存放apppython manage.py startapp app名字
具体根据项目的需要决定app数量
setting.py注册app
在app新建urls.py
在settings中添加app的路径
import sys # 创建应用之后,把apps目录加入到sys.path中 sys.path.insert(0, BASE_DIR) sys.path.insert(1, os.path.join(BASE_DIR, 'apps'))
注意点
分别在apps文件夹和项目根目录文件夹上右键,加入到Source Root中,优化导入路径(pycharm提示)。
3.5 配置模板文件
新建tenmplates文件夹存放html,同时在settings中注册templates
3.6 配置mysql数据库
python绝对是mysql数据库,orcale,sqlserver 基于java
两种方法
方法一:直接在settings.py文件中添加数据库配置信息
方法二:将数据库配置信息存到一个文件,在settings文件中将其引入。
新建utils文件夹来存放小工具的地方
在db文件夹下新建数据库配置文件 db.cnf (名字随意)
[client] database = 数据库名称 user = mysql用户名 password = 密码 host = 127.0.0.1 port = 3306 default-character-set = utf8
在settings.py文件中引入db.cnf
3.7 安装mysql数据库的python驱动
第一种:安装pymysql
# 安装pymysql pip install pymysql -i https://pypi.doubanio.com/simple
在 settings.py 文件所在目录下的 __init__.py 导入
第二种:安装mysqlclient
# 首先更新ubuntu sudo apt-get update # 然后按照依赖库 sudo apt-get install default-libmysqlclient-dev 最后安装mysqlclient pip install mysqlclient -i https://pypi.doubanio.com/simple3.8 配置redis缓存
linux系统 中必须有redis数据库,用于存放用户session信息,以及需要缓存的各种信息。
# 在虚拟机中安装django-redis pip install django-redis # settings.py文件中指定redis配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, 'session': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', } }, } # session存储缓存设置 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'session'
文档地址:https://django-redis-chs.readthedocs.io/zh_CN/latest/
3.9 配置日志器在项目根目录中创建一个logs文件夹,用于存放日志文件
下面代码是官方文档的
官方文档:https://docs.djangoproject.com/en/2.2/topics/logging/#module-django.utils.log
# 日志 LOGGING = { # 版本 'version': 1, # 是否禁用已存在的日志器 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '{levelname} {asctime} {module} {lineno:d} {message}', 'style': '{', }, 'simple': { 'format': '{levelname} {module} {lineno:d} {message}', 'style': '{', }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'INFO', # 这个handler可以记录一组日志文件 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(BASE_DIR, 'logs/tz_django.log'), # 单个日志文件最大字节数 'maxBytes': 300*1024*1024, # 日志文件个数 'backupCount': 10, 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'level': 'INFO', # 日志器接收的最低级别 'propagate': True, }, }, }
使用方法
# 使用方法 # import the logging library import logging # Get an instance of a logger # 此处的django为,settings.py文件中,LOGGING配置下的loggers中定义的日志器名称 logger = logging.getLogger('django') def my_view(request, arg1, arg): ... if ***: # Log an error message logger.error('Something went wrong!')3.10 时区配置
setting.py添加如下
# 修改语言 LANGUAGE_CODE = 'zh-hans' # 修改时区 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True # 使用时区 USE_TZ = True3.11 静态文件配置
在项目根目录创建一个static目录,用于存放静态文件(css, js, image, font等)
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ]
4. 模板知识
重要点
{{ }} 是模板变量 {% %}是模板标签4.1 模板标签
for…in…笔记
在这里插入图片描述
for...in... 类似于 Python 中的 for...in... 。可以遍历列表、元组、字符串、字典等一切可以遍历的对象。示例代码如下:
{% for person in persons %} <p>{{ person.name }}</p> {% endfor %}
如果想要反向遍历,那么在遍历的时候就加上一个 reversed 。示例代码如下:
{% for person in persons reversed %} <p>{{ person.name }}</p> {% endfor %}
遍历字典的时候,需要使用 items 、 keys 和 values 等方法。在 DTL 中,执行一个方法不能使用圆括号的形式。遍历字典示例代码如下:
{% for key,value in person.items %} <p>key:{{ key }}</p> <p>value:{{ value }}</p> {% endfor %}
if/else 标签
{% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %} <!-- 根据条件判断是否输出。if/else 支持嵌套。 接受 and , or 或者 not 等关键字来对多个变量做判断 -->
include 标签
<!-- {% include %} 标签允许在模板中包含其它的模板的内容. --> {% include "hello.html" %}4.2 模板过滤器
add
{{ value|add:"2" }}
如果 value 是等于4,那么结果将是6。如果 value 是等于一个普通的字符串,比如 abc ,那么结果将是 abc2 。
cut 移除值中所有指定的字符串。类似于 python 中的 replace(args,"") 。示例代码如下:
{{ value|cut:" " }}
date
# 数据 context = { "birthday": datetime.now() } # 模版 {{ birthday|date:"Y/m/d" }}
补充时间格式化字符
defaul
如果值被评估为 False 。比如 [] , "" , None , {} 等这些在 if 判断中为 False 的值,都会使用 default 过滤器提供的默认值。
示例代码如下:
{{ value|default:"nothing" }}
如果 value 是等于一个空的字符串。比如 "" ,那么以上代码将会输出 nothing 。
slice
类似于 Python 中的切片操作。示例代码如下:
{{ some_list|slice:"2:" }}
以上代码将会给 some_list 从 2 开始做切片操作。
join
类似与 Python 中的 join ,将列表/元组/字符串用指定的字符进行拼接。示例代码如下:
{{ value|join:"/" }}
如果 value 是等于 ['a','b','c'] ,那么以上代码将输出 a/b/c 。
length
获取一个列表/元组/字符串/字典的长度。示例代码如下:
{{ value|length }}
如果 value 是等于 ['a','b','c'] ,那么以上代码将输出 3 。如果 value 为 None ,那么以上将返回 0 。
4.3 模板变量在views.py中进行逻辑控制,编写向跳转页面传递内容的前端代码
from django.shortcuts import render def index(request): return render(request, 'book/index.html' context = { 'stu_id' : 12, } )
在templates下的book/index.html文件内容。其中,模板变量用{{}}表示。
<!--前端使用方式:{{ 变量名 }}--> <!--/book/index.html--> 学生id为:{{ stu_id }} <!--学生id为:12-->4.4 模板继承
在前端页面开发中。有些代码是需要重复使用的。这种情况可以使用 include 标签来实现。也可以使用另外一个比较强大的方式来实现,那就是模版继承。模版继承类似于 Python 中的类,以下是base模版的代码:
这个模版,我们取名叫做 base.html ,定义好一个简单的 html 骨架,然后定义好两个 block 接口,让子模版来根据具体需求来实现。子模板然后通过 extends 标签来实现,示例代码如下:
在这里插入图片描述
在这里插入图片描述
需要注意的是:extends标签必须放在模版的第开始的位置 子模板中的代码必须放在block中,否则将不会被渲染。
此文有点长,先在这里断开了。。
预计大约4篇。
补充开发逻辑,后台,分页,搜索,项目部署的内容。
一直原创,从未转载
请认准我, 将我置标
转发,好看支持一下,感谢