顺之利

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

我使用Django已经有一段时间,但是从没有详细的记录过一个完成小项目的过程。今天就开始记录下使用Django开发一个小项目:博客(Blog)。

工欲善其事,必先利其器。我所采用的工具如下:

1、IDE,我选择了PyCharm,这个取决于个人的喜欢和喜好。

2、Django版本:我使用了最新的1.10.5

3、图片插件:pillow

4、前端js主要用jquery-3.1.1.js

 

第一步:使用Pycharm创建工程

 

第二步:修改配置文件setting中静态文件的路径

STATICFILES_DIRS = [
  os.path.join(BASE_DIR, "static"),
]

同时在Blog_Django下建立普通的文件夹static

 

第三步:任何web程序都会有记录各种日志的工程。Django需要配置日志器和处理器

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'}
        # 日志格式
    },
    'filters': {
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        },
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'log/all.log',  # 日志输出文件
            'maxBytes': 1024 * 1024 * 5,  # 文件大小
            'backupCount': 5,  # 备份份数
            'formatter': 'standard',  # 使用哪种formatters日志格式
        },
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'log/error.log',
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 5,
            'formatter': 'standard',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        'request_handler': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'log/script.log',
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 5,
            'formatter': 'standard',
        },
        'scprits_handler': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'log/script.log',
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 5,
            'formatter': 'standard',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['default', 'console'],
            'level': 'DEBUG',
            'propagate': False
        },
        'django.request': {
            'handlers': ['request_handler'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'scripts': {
            'handlers': ['scprits_handler'],
            'level': 'INFO',
            'propagate': False
        },
        'blog.views': {
            'handlers': ['default', 'error'],
            'level': 'DEBUG',
            'propagate': True
        },
    }
}
配置log

对于视图函数中捕捉到的错误,我们最好存储到日志信息中。

blog.views是自定义的日志处理器

import logging


logger = logging.getLogger("blog.views")


def index(request):
    try:
        f = open("a.txt", "r")
    except Exception as e:
        logger.error(e)
    return render(request, "index.html")
自定义日志处理器

运行Django,在浏览器中请求http://127.0.0.1:8000/

我们在error.log中得到如下报错信息:

2017-02-27 17:49:12,095 [Thread-2:14068] [blog.views:19] [views:index] [ERROR]- [Errno 2] No such file or directory: 'a.txt'

 

第四步:配置数据库

我喜欢使用Mysql,轻巧而且功能齐全。

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'blog_django',
    'USER': 'root',
    'PASSWORD': 'admin',
    'HOST': '127.0.0.1',
    'PORT': '3306',
  }
}

由于python3不支持mysqldb,会报错

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'

但是我们可以使用pymysql来代替,不过我们需要在setting文件同级的__init__.py文件中做如下配置

import pymysql
pymysql.install_as_MySQLdb()

 

至此,Blog的环境基本搭建完毕,我们接下来会处理首页……

 

posted on 2017-02-27 23:35  顺之利  阅读(413)  评论(0编辑  收藏  举报