django开发3_mysql数据库的配置
1、搭建环境导入的pymysql库为链接python与mysql的工具,pillow为保存图像的库。
2、在settings中修改配置如下
添加mysql的配置(mysql数据库中必须先创建好数据库blog)
3、在__init__文件下添加如下
4、在app下的models下添加如下,
ps:第一个class为定义一个模型,有一列为name,但是django会自动生成一列id,所以为两列(也在生成数据库表后查看)
第二个class 为该模型内的定义,verbose_name 为该模型的名称,也在后面的admin中查看(以后讲),第二行verbose_name_plural为该模型复数像是的形式
def为直接调用该模型的时候返回的数值
class Meta 与 def __unicode__也有可无,不影响现阶段测试数据库。
5、继承django自带的Django来实现用户模型(可学可不学)
从django的登录认证模板继承原来的User,在进行扩展,如下配置
因为原来也有一个名为User的模型存在,所以要在settings下制定用哪一个User
在settings下添加如下
6、测试如下
可在pycharm自带的工具下,进行manage的操作,也可以在cmd下,进入虚拟环境后,切换到该想下用manage命令运行(百度)
输入命令如下,出现如下画面,执行成功
ps:生成创建模型的一个执行脚本
在执行syncdb执行模型脚本,并创建一个admin管理员(第一次执行的时候用,以后直接用migrate blog,创建,该命令不会创建admin用户)
ps:对models文件有任何修改,都需要重新生成一次脚本文件,执行。
出现如上,执行成功,可在数据库查看表有无创建成功
ps:因为我的models中存在多个表,所有有多个表。
models:源文件如下
#coding:utf-8
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
#用户信息
class User(AbstractUser):
avatar = models.ImageField(upload_to='avatar/%Y/%m',default='avatar/default.png',max_length=200,verbose_name='头像')
qq = models.CharField(max_length=20,blank=True,null=True,verbose_name='QQ号码')
mobile = models.CharField(max_length=11,blank=True,null=True,unique=True,verbose_name='手机号码')
class Meta:
verbose_name = '用户'
verbose_name_plural = verbose_name
ordering = ['-id']
def __unicode__(self):
return self.username
#标签
class Tag(models.Model):
name = models.CharField(max_length=30,verbose_name='标签名称')
class Meta:
verbose_name = '标签'
verbose_name_plural = verbose_name
def __unicode__(self):
return self.name
#分类
class Category(models.Model):
name = models.CharField(max_length=30,verbose_name='分类名称')
index = models.IntegerField(default=999,verbose_name='分类的排序')
class Meta:
verbose_name = '分类'
verbose_name_plural = verbose_name
def __unicode__(self):
return self.name
#文章模型
class Article(models.Model):
title = models.CharField(max_length=50,verbose_name='文章标题')
desc = models.CharField(max_length=50,verbose_name='文章描述')
content = models.TextField(verbose_name='文章内容')
click_count = models.IntegerField(default=0,verbose_name='点击次数')
is_recommend = models.BooleanField(default=False,verbose_name='是否推荐')
date_publish = models.DateTimeField(auto_now_add=True,verbose_name='发布时间')
user = models.ForeignKey(User,verbose_name='用户')
category = models.ForeignKey(Category,blank=True,null=True,verbose_name='分类')
tag = models.ManyToManyField(Tag,verbose_name='标签')
class Meta:
verbose_name = '文章'
verbose_name_plural = verbose_name
ordering = ['-date_publish']
def __unicode__(self):
return self.title
#评论模型
class Comment(models.Model):
content = models.TextField(verbose_name='评论内容')
date_publish = models.DateTimeField(auto_now_add=True,verbose_name='发布时间')
user = models.ForeignKey(User,blank=True,null=True,verbose_name='用户')
article = models.ForeignKey(Article,blank=True,null=True,verbose_name='文章')
pid = models.ForeignKey('self',blank=True,null=True,verbose_name='父级评论')
class Meta:
verbose_name = '评论'
verbose_name_plural = verbose_name
ordering = ['-date_publish']
def __unicode__(self):
return str(self.id)
#友情链接
class Link(models.Model):
title = models.CharField(max_length=50,verbose_name='标题')
description = models.CharField(max_length=200,verbose_name='友情链接描述')
callback_url = models.URLField(verbose_name='url地址')
date_publish = models.DateTimeField(auto_now_add=True,verbose_name='发布时间')
index = models.IntegerField(default=999,verbose_name='排列顺序(从小到大)')
class Meta:
verbose_name = '友情链接'
verbose_name_plural = verbose_name
ordering = ['index','id']
def __unicode__(self):
return self.title
#广告
class Ad(models.Model):
title = models.CharField(max_length=50,verbose_name='广告标题')
description = models.CharField(max_length=200,verbose_name='广告描述')
image_url = models.ImageField(upload_to='ad/%Y/%m',verbose_name='图片路径')
callback_url = models.URLField(null=True,blank=True,verbose_name='回调URL')
date_publish = models.DateTimeField(auto_now_add=True,verbose_name='发布时间')
index = models.IntegerField(default=999,verbose_name='排序顺序(从小到大)')
class Meta:
verbose_name = '广告'
verbose_name_plural = verbose_name
ordering = ['index','id']
def __unicode__(self):
return self.title