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的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
Python3基础之基本数据类型概述
Aug 13 Python
用Python实现换行符转换的脚本的教程
Apr 16 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
Python MD5加密实例详解
Aug 02 Python
python爬取网页转换为PDF文件
Jun 07 Python
python实现合并两个排序的链表
Mar 03 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
Python搭建HTTP服务过程图解
Dec 14 Python
anaconda升级sklearn版本的实现方法
Feb 22 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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
PHP操作数组相关函数
2011/02/03 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
php MessagePack介绍
2013/10/06 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
利用Python破解斗地主残局详解
2017/06/30 Python
python查看模块安装位置的方法
2018/10/16 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
会计主管岗位职责
2014/01/03 职场文书
专家推荐信模板
2014/05/09 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
生日宴会祝酒词
2015/08/10 职场文书