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做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...
随机推荐
- 第一把机械键盘 ikbc C-87
终于入了机械键盘,ikbc C-87黑色红轴. 原本上周五晚上就到了,但是那个键盘有几个键弹起后弹簧会持续响,敲了一会,实在不能忍受,就申请换货了.新换的键盘今天终于到了,没有了之前的问题,但是几乎每 ...
- Java设计模式-单例模式及线程安全问题
单例模式是非常常用的设计模式,他确保了一个类只有一个对象,并且这个对象是自己创建的,外界可以获取使用到这个对象. 单例模式一般有两种:懒汉式,饿汉式(其实还有一种登记式,把创建的对象放在map集合中, ...
- spring Boot+spring Cloud实现微服务详细教程第二篇
上一篇文章已经说明了一下,关于spring boot创建maven项目的简单步骤,相信很多熟悉Maven+Eclipse作为开发常用工具的朋友们都一目了然,这篇文章主要讲解一下,构建spring bo ...
- gulp工程化工具
gulpfile.js var gulp = require('gulp'); var rename = require('gulp-rename') var pump = require('pump ...
- linux --> 获取进程执行时间
获取进程执行时间 一.时间概念 在linux下进行编程时,可能会涉及度量进程的执行时间.linux下进程的时间值分三种: 时钟时间(real time):指进程从开始执行到结束,实际执行的时间. 用户 ...
- Algorithm --> 树中求顶点A和B共同祖先
树中求顶点A和B共同祖先 题目: 给定一颗树,以及两个顶点A和B,求最近的共同祖先,和包含的子顶点个数? 比如:给定如下图的树,以及顶点13和8,则共同祖先为3,以3为root的子顶点共有8个
- Vue项目环境搭建(node+webpack)
安装node.js 下载地址:https://nodejs.org/en/download/ node -v //查看node.js版本 项目环境配置: 安装vue-cli:npm install - ...
- windows环境下,apache虚拟主机配置
在windows环境下,apache从配置文件的相关配置: Windows 是市场占有率最高的 PC 操作系统, 也是很多人的开发环境. 其 VirtualHost 配置方法与 Linux 上有些差异 ...
- 游戏安全有多重要?——GAME-TECH游戏开发者技术沙龙
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云+社区运营团队发布在腾讯云+社区 腾讯云GAME-TECH沙龙继3月深圳站后,将于4月13日来到北京站,与游戏厂商和游戏开发者,畅聊 ...
- C语言的第二次作业
一.PTA实验作业 题目1. 计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.本题代码 #include<stdio.h> #include<math.h> int ...