背景:

之前也读过一些关于django的一些书,看过别人写的一些博客系统。但是总有一种看别人的都会,但自己写不出来的感觉,于是为了加深对django的学习就开始动手学习了。

环境搭建:

环境:使用python2.7(x64)+django1.11.5+mysql5.7.17 win7x64环境下,ide使用pycharm(个人破解版本)

1)新建一个myblog的django项目,同时定一个blog的app,新建成功后,修改myblog工程下settings.py配置(把数据库从默认的sqlite切换到mysql下):

  1. """
  2. 'ENGINE': 'django.db.backends.sqlite3',
  3. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  4. """
  5. DATABASES = {
  6. 'default': {
  7. 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2','mysql', 'sqlite3' or 'oracle'
  8. 'NAME': 'my_django_blog', # Your db name, Or path to database file if using sqlite3
  9. 'USER': 'root', # Your db user name, Not used with sqlite3
  10. 'PASSWORD': '', # Your db password, Not used with sqlite3
  11. 'HOST': '', # Your db host, set to empty string('') for default for localhost, Not used with sqlite3
  12. 'PORT': '', # Your db port, set to empty string('') for default, Not used with sqlite3
  13. }
  14. }

注意:

上边的注视掉的默认配置最好不要包含到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

  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.db import models
  4. from django.contrib.auth.admin import User
  5.  
  6. # '''
  7. # 文章栏目(分类)实体
  8. # '''
  9. class Category(models.Model):
  10. name = models.CharField(max_length=128) # 文章栏目(分类)名称
  11.  
  12. def __str__(self):
  13. return self.name
  14.  
  15. # '''
  16. # 文章标签实体
  17. # '''
  18. class Tag(models.Model):
  19. name = models.CharField(max_length=128) # 文章标签名称
  20.  
  21. def __str__(self):
  22. return self
  23.  
  24. # """
  25. # 文章实体
  26. # """
  27. class Post(models.Model):
  28. title = models.CharField(max_length=128) # 文章标题,定义最大长度为128
  29. """
  30. 如果不使用blank=True标识,则当该值为空时会保存操作会抛出异常
  31. """
  32. summary = models.CharField(max_length=256, blank=True) # 文章简介,定义最大长度为1256。
  33. body = models.TextField() # 文章内容,较长因此定义为TextField
  34. create_time = models.DateTimeField() # 文章创建时间
  35. modify_time = models.DateTimeField() # 文章修改时间
  36. views = models.PositiveIntegerField(default=0) # 文章阅读数量,默认为0
  37. '''
  38. 一篇文章只能归属一个栏目,而一个栏目下可能会拥有多篇文章,因此这是一对多的关联关系。
  39. 关于用法请阅读:https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
  40. '''
  41. category = models.ForeignKey(Category) # 文章分类
  42. '''
  43. 一篇文章允许有多个标签,一个标签允许被多篇文章使用,因此他们的关系是多对多关系,但是同时该值可以不设置,因此使用black=True标识该字段允许为空。
  44. '''
  45. tags = models.ManyToManyField(Tag, blank=True) # 文章标签
  46. '''
  47. # 由于django.contrib.auth 是 Django 内置的应用,它用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
  48. #一篇文章对应一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
  49. '''
  50. author = models.ForeignKey(User) # 文章作者
  51.  
  52. def __str__(self):
  53. 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一切都正常。

  1. C:\Users\Administrator>mysql -uroot -p123456
  2. mysql: [Warning] Using a password on the command line interface can be insecure.
  3.  
  4. Welcome to the MySQL monitor. Commands end with ; or \g.
  5. Your MySQL connection id is 4
  6. Server version: 5.7.17 MySQL Community Server (GPL)
  7.  
  8. Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  9.  
  10. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
  11.  
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  13.  
  14. mysql> show databases;
  15. +--------------------+
  16. | Database |
  17. +--------------------+
  18. | information_schema |
  19. | blogs |
  20. | hibernate_01 |
  21. | hibernate_09 |
  22. | j2cms-ssh |
  23. | my_blog |
  24. | my_ssh |
  25. | mybatis |
  26. | mysql |
  27. | performance_schema |
  28. | sys |
  29. +--------------------+
  30. 11 rows in set (0.00 sec)
  31.  
  32. mysql> create datebase my_django_blog;
  33. 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
  34. mysql> create database my_django_blog;
  35. Query OK, 1 row affected (0.01 sec)
  36.  
  37. mysql> commit;
  38. Query OK, 0 rows affected (0.00 sec)
  39.  
  40. mysql> use my_django_blog;
  41. Database changed
  42. mysql> show tables;
  43. +----------------------------+
  44. | Tables_in_my_django_blog |
  45. +----------------------------+
  46. | auth_group |
  47. | auth_group_permissions |
  48. | auth_permission |
  49. | auth_user |
  50. | auth_user_groups |
  51. | auth_user_user_permissions |
  52. | blog_category |
  53. | blog_post |
  54. | blog_post_tags |
  55. | blog_tag |
  56. | django_admin_log |
  57. | django_content_type |
  58. | django_migrations |
  59. | django_session |
  60. +----------------------------+
  61. 14 rows in set (0.00 sec)
  62.  
  63. mysql>

Django:(博客系统)使用使用mysql数据&创建post/category/tag实体,并同步到数据中的更多相关文章

  1. 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类中做 ...

  2. web开发-Django博客系统

    项目界面图片预览 项目代码github地址 项目完整流程 项目流程: 1 搞清楚需求(产品经理) (1) 基于用户认证组件和Ajax实现登录验证(图片验证码) (2) 基于forms组件和Ajax实现 ...

  3. Django(博客系统):重写了auth.User后使用createsupperuser出错解决办法

    背景:重写django的系统User后,使用createsupperuser创建用户失败 由于项目需要扩展django默认新的auth.User系统(添加两个字段:头像.简介等字段),因此就重写了dj ...

  4. Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce

    文章内容使用django-ckeditor 1)安装django-ckeditor pip install django-ckeditorpip install Pillow 2)在settings. ...

  5. Django博客系统

    零.创建项目及配置 一.编写 Model 层的代码 二.配置 admin 页面 三.根据需求定制 admin

  6. Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置

    Django后台一般是不需要人为的去开发的,因为django已经通过配置实现哪些模块是后台需要管理,如何排序,列表展示哪些列,列显示名称,是否为空(默认值),过滤条件,分页页数,列表中哪些项可编辑等等 ...

  7. 使用Phalcon框架开发一个简易的博客系统

    使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...

  8. 【完全开源】Django多人博客系统——支持MarkDown和tinyMce

    目录 说明 功能 如何使用 说明 这是一个用Django开发的多人博客系统,功能简单,但完全满足公司内部或个人的博客使用需求.支持普通富文本编辑器(tinyMCE)和MarkDown编辑器 由于嫌弃D ...

  9. 这几天有django和python做了一个多用户博客系统(可选择模板)

    这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...

随机推荐

  1. FNV算法实战

    HASH算法介绍 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长 ...

  2. 原生拖拽js利用localstorage保存位置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. BAT脚本/Dos 改ip地址

    BAT脚本/Dos 改ip 经常换地方上网,总改这些很麻烦,直接写三个bat,点一下就换了.需要管理员权限.之前用python的wmi写过,但是没起作用. ip:10.10.41.15 子网掩码:25 ...

  4. IT连创业系列:产品设计之答题模块

    前言: 距上篇写完:IT连创业系列:新的一年,先淫文一篇! 转眼又两个星期了,今天不写文,估计大伙又得等两周了. 所以啊~~ 只能再努力一点了,花一天半天的,继续和大伙分享这让人心碎的创业历程. 这两 ...

  5. 利用国外服务器搭建ss

    wget --no-check-certificate  https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/s ...

  6. [bzoj1497][NOI2006]最大获利_网络流_最小割

    最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...

  7. bug单的生命周期

    测试工程师发现了软件的缺陷(bug),那修复bug的整个流程是怎么样的呢? 1.发现bug 2.和开发确认是否是bug 3.如果是bug则提bug单到测试经理,如果不是则放过 4.测试经理把bug单走 ...

  8. Python数据增强(data augmentation)库--Augmentor 使用介绍

    Augmentor 使用介绍 原图 random_distortion(probability, grid_height, grid_width, magnitude) 最终选择参数为 p.rando ...

  9. IOS UITextView自适应高度

    LOFTER app需要实现了一个类似iPhone短信输入框的功能,它的功能其实蛮简单,就是:[UITextView的高度随着内容高度的变化而变化].实现思路应该是: 在UITextView的text ...

  10. maven(二)创建工程

    创建动态Web工程打war包 ​ File→new→Maven Project→勾上create a simple project→然后next> ​ 然后会报一下的错 ​ 解决 ​ 创建jav ...