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命令行上传到GitHub上
[本人GitHub账号:] 用户名:chenhongshuang 密码:shuangshuang6300 邮箱:2452420371@qq.com 进入GitHub账号后 1·新建项目文件名称例dem ...
- spring Boot+spring Cloud实现微服务详细教程第一篇
前些天项目组的大佬跟我聊,说项目组想从之前的架构上剥离出来公用的模块做微服务的开发,恰好去年的5/6月份在上家公司学习了国内开源的dubbo+zookeeper实现的微服务的架构.自己平时对微服务的设 ...
- 笔记:I/O流-文件操作
Java库中使用 Path 和 Files 类封装了在用户机器上处理文件系统所需要的所有功能,可以使用Paths来获取一个具体的Path对象,来表示具体的路径. 路径 Path表示的是一个目录名序列, ...
- protobuf(quickStart)
1.简介 Protocol Buffers是Google开发一种数据描述语言,能够将数据进行序列化,可用于数据存储.通信协议等方面. 可以理解成更快.更简单.更小的JSON或者XML,区别在于Prot ...
- 自动化运维工具---expec
作为运维经常操作Linux服务器是不可避免的事情的,那么你们都是怎么管理的呢? 我们管理的方式较为复杂了,我说一下: 有一套服务器资产管理系统,所有服务器都记录在上面,包括用户名密码,内外网地址都会有 ...
- 实验楼 -- (Linux)
1. 允许用户SSH登陆 # 打开ssh配置文件, 一般在/etc/ssh/sshd_config sudo vim /etc/ssh/sshd_config # 在文件最后添加: # 其中shiya ...
- echarts图表变形解决方案
在同一页面的多个echarts图在查询或切换图片时可能会变形,如图 解决方案是添加以下几行代码 /*在查询或切换统计图时图片有可能会变形,于是每次调getEchartsData()都给每个chart的 ...
- Jquery判断单选框是否选中和获取选中的值
第一种:利用选中值判断选中 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- 团队作业7——Beta版本冲刺计划及安排
上一个阶段的总结: 在Alpha阶段,我们小组已近完成了大部分的功能要求,小组的每一个成员都发挥了自己的用处.经过了这么久的磨合,小组的成员之间越来越默契,相信在接下来的合作中,我们的开发速度会越来越 ...
- scrapy 修改URL爬取起始位置
import scrapy from Autopjt.items import myItem from scrapy.http import Request class AutospdSpider(s ...