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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
使用python判断你是青少年还是老年人
Nov 29 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
Django 重写用户模型的实现
Jul 29 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Python socket处理client连接过程解析
Mar 18 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 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实现多级分类生成树的方法示例
2017/02/07 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
python按照多个条件排序的方法
2019/02/08 Python
pywinauto自动化操作记事本
2019/08/26 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
一套软件开发工程师笔试题
2015/05/18 面试题
火车的故事教学反思
2014/02/11 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
团委副书记工作总结
2015/08/14 职场文书
倡议书怎么写?
2019/04/11 职场文书
使用scrapy实现增量式爬取方式
2022/06/21 Python
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS