我使用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 }, } }
对于视图函数中捕捉到的错误,我们最好存储到日志信息中。
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的环境基本搭建完毕,我们接下来会处理首页……