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使用pil生成图片验证码的方法
May 08 Python
python简单实现基数排序算法
May 16 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
python3.6数独问题的解决
Jan 21 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
python机器学习实现决策树
Nov 11 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 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
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
python抓取百度首页的方法
2015/05/19 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
Python线程同步的实现代码
2018/10/03 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
python如何更新包
2020/06/11 Python
python如何写try语句
2020/07/14 Python
python实现画图工具
2020/08/27 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
Python可以用来做什么
2020/11/23 Python
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
最新计算机专业自荐信
2013/10/16 职场文书
基督教婚礼主持词
2014/03/14 职场文书
股份合作协议书范本
2014/04/14 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android