Django:(博客系统)使用使用mysql数据&创建post/category/tag实体,并同步到数据中
背景:
之前也读过一些关于django的一些书,看过别人写的一些博客系统。但是总有一种看别人的都会,但自己写不出来的感觉,于是为了加深对django的学习就开始动手学习了。
环境搭建:
环境:使用python2.7(x64)+django1.11.5+mysql5.7.17 win7x64环境下,ide使用pycharm(个人破解版本)
1)新建一个myblog的django项目,同时定一个blog的app,新建成功后,修改myblog工程下settings.py配置(把数据库从默认的sqlite切换到mysql下):
"""
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
"""
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2','mysql', 'sqlite3' or 'oracle'
'NAME': 'my_django_blog', # Your db name, Or path to database file if using sqlite3
'USER': 'root', # Your db user name, Not used with sqlite3
'PASSWORD': '', # Your db password, Not used with sqlite3
'HOST': '', # Your db host, set to empty string('') for default for localhost, Not used with sqlite3
'PORT': '', # Your db port, set to empty string('') for default, Not used with sqlite3
}
}
注意:
上边的注视掉的默认配置最好不要包含到DATABASES={}配置项内部,可能会导致错误。
2)mysql安装就跳过,但是需要安装mysql的python驱动:
可以选择三中安装方式:
1) pip install MySQL-python (注意大小写要一致)
2)在 https://pypi.python.org/pypi/MySQL-python/ 下下载MySQL-python的压缩包 解压到本地MySQL-python-1.2.5,进入到MySQL-python-1.2.5 下,输入:
python setup.py install
3)下载MySQL_python-*.whl安装包,在下载之前先要确定你安装的Python是32位的还是64位的,如果是32位的就下载32位的,如果是64位的就下载64位的。在这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/

下载后进入下载文件所在的目录:shift键+鼠标右键-》在“打开的菜单中”找到“在此处打开命令窗口(W)”点击进入cmd窗口,运行:pip install *.whl

备注:
前两种方法我再win7环境下安装python的mysql驱动都失败了(失败信息:building '_mysql' extension error: INCLUDE environment variable is empty),建议使用第三种。
创建post/category/tag实体,并同步到数据中
关于在django项目中如何使用实体,请参考文章:https://docs.djangoproject.com/en/1.10/topics/db/models/
1)在blog的app下的models.py文件内创建实体:post/category/tag

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.admin import User # '''
# 文章栏目(分类)实体
# '''
class Category(models.Model):
name = models.CharField(max_length=128) # 文章栏目(分类)名称 def __str__(self):
return self.name # '''
# 文章标签实体
# '''
class Tag(models.Model):
name = models.CharField(max_length=128) # 文章标签名称 def __str__(self):
return self # """
# 文章实体
# """
class Post(models.Model):
title = models.CharField(max_length=128) # 文章标题,定义最大长度为128
"""
如果不使用blank=True标识,则当该值为空时会保存操作会抛出异常
"""
summary = models.CharField(max_length=256, blank=True) # 文章简介,定义最大长度为1256。
body = models.TextField() # 文章内容,较长因此定义为TextField
create_time = models.DateTimeField() # 文章创建时间
modify_time = models.DateTimeField() # 文章修改时间
views = models.PositiveIntegerField(default=0) # 文章阅读数量,默认为0
'''
一篇文章只能归属一个栏目,而一个栏目下可能会拥有多篇文章,因此这是一对多的关联关系。
关于用法请阅读:https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
'''
category = models.ForeignKey(Category) # 文章分类
'''
一篇文章允许有多个标签,一个标签允许被多篇文章使用,因此他们的关系是多对多关系,但是同时该值可以不设置,因此使用black=True标识该字段允许为空。
'''
tags = models.ManyToManyField(Tag, blank=True) # 文章标签
'''
# 由于django.contrib.auth 是 Django 内置的应用,它用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
#一篇文章对应一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
'''
author = models.ForeignKey(User) # 文章作者 def __str__(self):
return self.title
2)在“manage.py@myblog”窗口中执行数据同步
执行数据同步的目的是为了新建数据库及定义的实体类对应的数据表的同步。
问题:当执行makemigrations时,提示数据库不存在(django.db.utils.OperationalError: (1049, "Unknown database 'my_django_blog'")),于是手动在mysql数据库中创建了my_django_blog数据库。
之后在执行makemigrations、migrate、createsuperuser一切都正常。
C:\Users\Administrator>mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.17 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| blogs |
| hibernate_01 |
| hibernate_09 |
| j2cms-ssh |
| my_blog |
| my_ssh |
| mybatis |
| mysql |
| performance_schema |
| sys |
+--------------------+
11 rows in set (0.00 sec) mysql> create datebase my_django_blog;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'datebase my_django_blog' at line 1
mysql> create database my_django_blog;
Query OK, 1 row affected (0.01 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> use my_django_blog;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_my_django_blog |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| blog_category |
| blog_post |
| blog_post_tags |
| blog_tag |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
14 rows in set (0.00 sec) mysql>
Django:(博客系统)使用使用mysql数据&创建post/category/tag实体,并同步到数据中的更多相关文章
- Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?
问题背景 添加文章时间没问题,但为了设定博客文章按照时间分层筛选(创建时间的年份.年月&月份来搜索文章),我在blog这个django app的admin.py的ArticleAdmin类中做 ...
- web开发-Django博客系统
项目界面图片预览 项目代码github地址 项目完整流程 项目流程: 1 搞清楚需求(产品经理) (1) 基于用户认证组件和Ajax实现登录验证(图片验证码) (2) 基于forms组件和Ajax实现 ...
- Django(博客系统):重写了auth.User后使用createsupperuser出错解决办法
背景:重写django的系统User后,使用createsupperuser创建用户失败 由于项目需要扩展django默认新的auth.User系统(添加两个字段:头像.简介等字段),因此就重写了dj ...
- Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce
文章内容使用django-ckeditor 1)安装django-ckeditor pip install django-ckeditorpip install Pillow 2)在settings. ...
- Django博客系统
零.创建项目及配置 一.编写 Model 层的代码 二.配置 admin 页面 三.根据需求定制 admin
- Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置
Django后台一般是不需要人为的去开发的,因为django已经通过配置实现哪些模块是后台需要管理,如何排序,列表展示哪些列,列显示名称,是否为空(默认值),过滤条件,分页页数,列表中哪些项可编辑等等 ...
- 使用Phalcon框架开发一个简易的博客系统
使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...
- 【完全开源】Django多人博客系统——支持MarkDown和tinyMce
目录 说明 功能 如何使用 说明 这是一个用Django开发的多人博客系统,功能简单,但完全满足公司内部或个人的博客使用需求.支持普通富文本编辑器(tinyMCE)和MarkDown编辑器 由于嫌弃D ...
- 这几天有django和python做了一个多用户博客系统(可选择模板)
这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...
随机推荐
- git 使用方式
一.常用操作命令 1.初始化操作 git config --global user.name '<name>' # 设置提交者名称 git config --global user.ema ...
- 兄弟连PHP培训教你提升效率的20个要点
兄弟连PHP培训教你提升效率的20个要点 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字 ...
- 教你如何前后端完全分离(非api、ajax)
我的前后分离,不是api,不是ajax,我这里只讨论html与后端结合 前话 曾经风靡一时的dedecms相信做网站的十有八.九都知道,还有那么一些不是技术出生的人,通过看一下文档,也能访问出网站出来 ...
- 使用nodegrass简单封装http请求例子
1.项目中经常性的使用http发送请求处理数据.而大部分请求方式为get和post,于是对http请求进行封装,提供代码的利用率. 2.nodegress是nodejs的一个请求工具. 具体步骤及代码 ...
- eventProxyAPI(转)
EventProxy 仅仅是一个很轻量的工具,但是能够带来一种事件式编程的思维变化.有几个特点: 利用事件机制解耦复杂业务逻辑 移除被广为诟病的深度callback嵌套问题 将串行等待变成并行等待,提 ...
- Vue之九数据劫持实现MVVM的数据双向绑定
vue是通过数据劫持的方式来做数据绑定的,其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的. 如果不熟悉defineProperty,猛 ...
- Dijkstra算法 Java实现
public class Dijkstra { private static int N = 1000; private static int[][] Graph = { { 0, 1, 5, N, ...
- flex布局简析
最近开始对flex布局进行一个重新的认识. 首先. flex布局适用于所有元素 但是注意一点的就是,一旦父级元素设定flex布局的时候,子元素的传统布局属性, float,clear,vertical ...
- react 实用的性能优化方式
react 组件渲染分为初始化渲染和更新渲染,当我们更新某个组件的时候,只是想关键路径上组件的render,但react的默认做法是调用所以组件的reder,再生成虚拟dom进行对比,如不变则不进行更 ...
- Java基础学习笔记十四 常用API之基本类型包装类
基本类型包装类 Java中有8种基本的数据类型,可是这些数据是基本数据,想对其进行复杂操作,变的很难.怎么办呢?在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们 ...