Python Django搭建网站流程图解


Posted in Python onJune 13, 2020

1. 创建Django REST framework工程

1.1手动创建工程文件夹

1.2进去工程文件夹内,执行命令:django-admin startproject web_project创建工程目录

1.3修改,添加目录结构

apps 存放Django的应用libs 存放第三方的库文件settings 存放配置文件的目录,分为开发dev和线上produtils 存放项目自己定义的公共函数或类等docs 用于存放一些说明文档资料

Python Django搭建网站流程图解2.

修改配置文件

2.1 将Django工程中的settings.py文件拷贝到新创建的settings目录下,并重命名为dev.py,并修改入口文件manage.py文件中配置文件路径。

Python Django搭建网站流程图解

2.2修改settings/dev.py 文件中的路径信息

我们将Django的应用放到了工程目录/web_project/apps目录下,如果创建一个应用,比如users,那么在配置文件的INSTALLED_APPS中注册应用应该如下:

INSTALLED_APPS = [
  ...
  'web_project.apps.users.apps.UsersConfig',
]

为了还能像如下方式简便的注册引用,我们需要向Python解释器的导包路径中添加apps应用目录的路径。

INSTALLED_APPS = [
  ...
  'users.apps.UsersConfig',
]

我们将配置文件改为放在settings子目录下,所以 配置文件中的BASE_DIR指向的变为了工程目录/web_project/web_project/web_project.

使用sys.path添加<BASE_DIR>/apps目录,即可添加apps应用的导包路径。

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 添加导包路径
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

2.3INSTALLED_APPS

pip install djangorestframework

在INSTALLED_APPS中添加rest_framework

INSTALLED_APPS = [
  ...
  'rest_framework',
]

2.4数据库配置

采用mysql数据库

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'HOST': '127.0.0.1', # 数据库主机
    'PORT': 3306, # 数据库端口
    'USER': 'caicai', # 数据库用户名
    'PASSWORD': 'caicai', # 数据库用户密码
    'NAME': 'web_project' # 数据库名字
  }
}

注意:

记得在/web_project/web_project/__init__.py文件中添加

import pymysqlpymysql.install_as_MySQLdb()

进入mysql数据库,为项目创建数据库

create user caicai identified by 'caicai'; 创建用户账号 meiduo, 密码 meiduo (由identified by 指明)
grant all on web_project.* to 'caicai'@'%'; 授权web_project数据库下的所有表(web_project.*)的所有权限(all)给用户caicai在以任何ip访问数据库的时候('caicai'@'%')
flush privileges; 刷新生效用户权限

2.5安装django-redis,并配置

执行命令进行安装:pip install django-redis

CACHES = {
  "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://10.211.55.5:6379/0",
    "OPTIONS": {
      "CLIENT_CLASS": "django_redis.client.DefaultClient",
    }
  },
  "session": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://10.211.55.5:6379/1",
    "OPTIONS": {
      "CLIENT_CLASS": "django_redis.client.DefaultClient",
    }
  }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

除了名为default的redis配置外,还补充了名为session的redis配置,分别使用两个不同的redis库。

同时修改了Django的Session机制使用redis保存,且使用名为'session'的redis配置。

此处修改Django的Session机制存储主要是为了给Admin站点使用。

关于django-redis 的使用,说明文档可见http://django-redis-chs.readthedocs.io/zh_CN/latest/

2.6本地化语言和时区

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

2.7日志

LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'formatters': {
    'verbose': {
      'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
    },
    'simple': {
      'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
    },
  },
  'filters': {
    'require_debug_true': {
      '()': 'django.utils.log.RequireDebugTrue',
    },
  },
  'handlers': {
    'console': {
      'level': 'DEBUG',
      'filters': ['require_debug_true'],
      'class': 'logging.StreamHandler',
      'formatter': 'simple'
    },
    'file': {
      'level': 'INFO',
      'class': 'logging.handlers.RotatingFileHandler',
      'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/web_project.log"), # 日志文件的位置
      'maxBytes': 300 * 1024 * 1024,
      'backupCount': 10,
      'formatter': 'verbose'
    },
  },
  'loggers': {
    'django': { # 定义了一个名为django的日志器
      'handlers': ['console', 'file'],
      'propagate': True,
    },
  }
}

2.8异常处理

修改Django REST framework的默认异常处理方法,补充处理数据库异常和Redis异常。

新建utils/exceptions.py

from rest_framework.views import exception_handler as drf_exception_handler
import logging
from django.db import DatabaseError
from redis.exceptions import RedisError
from rest_framework.response import Response
from rest_framework import status

# 获取在配置文件中定义的logger,用来记录日志
logger = logging.getLogger('django')

def exception_handler(exc, context):
  """
  自定义异常处理
  :param exc: 异常
  :param context: 抛出异常的上下文
  :return: Response响应对象
  """
  # 调用drf框架原生的异常处理方法
  response = drf_exception_handler(exc, context)

  if response is None:
    view = context['view']
    if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
      # 数据库异常
      logger.error('[%s] %s' % (view, exc))
      response = Response({'message': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)

  return response

配置文件中添加

REST_FRAMEWORK = {
  # 异常处理
  'EXCEPTION_HANDLER': 'web_project.utils.exceptions.exception_handler',
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
python使用socket向客户端发送数据的方法
Apr 29 Python
Python中将字典转换为列表的方法
Sep 21 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
python opencv之分水岭算法示例
Feb 24 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
python事件驱动event实现详解
Nov 21 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
python实现QQ批量登录功能
Jun 19 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
python日志模块logbook使用方法
Sep 19 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
Python xpath表达式如何实现数据处理
Jun 13 #Python
Python轻量级web框架bottle使用方法解析
Jun 13 #Python
PyInstaller运行原理及常用操作详解
Jun 13 #Python
Pandas缺失值2种处理方式代码实例
Jun 13 #Python
Python Django中间件使用原理及流程分析
Jun 13 #Python
Django QuerySet查询集原理及代码实例
Jun 13 #Python
Python celery原理及运行流程解析
Jun 13 #Python
You might like
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
javascript常用方法汇总
2014/12/02 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python中获取网页状态码的两个方法
2014/11/03 Python
Python中str.join()简单用法示例
2018/03/20 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
基于Python fminunc 的替代方法
2020/02/29 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
正隆泰信息技术有限公司上机题
2012/06/14 面试题
银行职业规划书范文
2013/12/28 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
自我鉴定书
2014/03/24 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
python中mongodb包操作数据库
2022/04/19 Python
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android