运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

Django项目知识点(一)

运维开发网 https://www.qedev.com 2021-04-11 17:12 出处:51CTO 作者:mb5ffd6eef9281a
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开

Django项目知识点(一)

1. Django开发前景

1.1 Django的厉害之处
  • 在python中,与web开发环境相关的包有13045

  • django就占了9091个,大约70%,所以django占领了python的web开发70%市场

  • 在python中,活跃的web框架多达54个,其中最活跃的有,DjangoFlaskPyramidZope

  • 最受欢迎的就是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的大致流程

Django项目知识点(一)

git的相关命令

Django项目知识点(一)

确保git能将代码更新到github或者码云

3.2 环境安装

mkVirtualenv -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提示)。

Django项目知识点(一)

3.5 配置模板文件

新建tenmplates文件夹存放html,同时在settings中注册templates

Django项目知识点(一)

3.6 配置mysql数据库

python绝对是mysql数据库,orcale,sqlserver 基于java

两种方法

方法一:直接在settings.py文件中添加数据库配置信息

Django项目知识点(一)

方法二:将数据库配置信息存到一个文件,在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

Django项目知识点(一)

3.7 安装mysql数据库的python驱动

  • 第一种:安装pymysql

# 安装pymysql

pip install pymysql -i https://pypi.doubanio.com/simple

settings.py文件所在目录下的__init__.py导入

Django项目知识点(一)

  • 第二种:安装mysqlclient

# 首先更新ubuntu

sudo apt-get update 

# 然后按照依赖库

sudo apt-get install default-libmysqlclient-dev

最后安装mysqlclient

pip install mysqlclient -i https://pypi.doubanio.com/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.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 = True

3.11 静态文件配置

在项目根目录创建一个static目录,用于存放静态文件(css, js, image, font等)

STATIC_URL = '/static/'

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, 'static')

]

4. 模板知识

重要点

{{ }} 是模板变量 

{% %}是模板标签

4.1 模板标签

for…in…笔记

Django项目知识点(一)

在这里插入图片描述

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 %}

遍历字典的时候,需要使用itemskeysvalues等方法。在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" }}

补充时间格式化字符

Django项目知识点(一)

defaul

如果值被评估为False。比如[]""None{}等这些在if判断中为False的值,都会使用default过滤器提供的默认值。

示例代码如下:

{{ value|default:"nothing" }}

如果value是等于一个空的字符串。比如"",那么以上代码将会输出nothing

slice

类似于Python中的切片操作。示例代码如下:

{{ some_list|slice:"2:" }}

以上代码将会给some_list2开始做切片操作。

join

类似与Python中的join,将列表/元组/字符串用指定的字符进行拼接。示例代码如下:

{{ value|join:"/" }}

如果value是等于['a','b','c'],那么以上代码将输出a/b/c

length

获取一个列表/元组/字符串/字典的长度。示例代码如下:

{{ value|length }}

如果value是等于['a','b','c'],那么以上代码将输出3。如果valueNone,那么以上将返回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标签来实现,示例代码如下:

Django项目知识点(一)

在这里插入图片描述

Django项目知识点(一)

在这里插入图片描述

需要注意的是:extends标签必须放在模版的第开始的位置

子模板中的代码必须放在block中,否则将不会被渲染。

此文有点长,先在这里断开了。。

预计大约4篇。

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

Django项目知识点(一)

一直原创,从未转载

请认准我,将我置标

Django项目知识点(一)

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

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号