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爬虫功能
Dec 31 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Django实现内容缓存实例方法
Jun 30 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
Python之字典添加元素的几种方法
Sep 30 Python
Python matplotlib安装以及实现简单曲线的绘制
Apr 26 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解析mht文件转换成html的实例
2017/03/13 PHP
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
Python 登录网站详解及实例
2017/04/11 Python
Python引用计数操作示例
2018/08/23 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
傲盾软件面试题
2015/08/17 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
linux比较文件内容的命令是什么
2013/03/04 面试题
护士求职推荐信范文
2013/11/23 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
数学教师个人总结
2015/02/06 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
教师研修随笔感言
2015/11/18 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android