好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Django项目知识点(一)

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文件夹创建和存放app

python 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测试数据/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测试数据/simple  
3.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测试数据/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?=?True  
3.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篇。

补充开发逻辑,后台,分页,搜索,项目部署的内容。

一直原创,从未转载

请认准我, 将我置标

转发,好看支持一下,感谢

查看更多关于Django项目知识点(一)的详细内容...

  阅读:35次