前提ajango的 数据库主要是为了存取网站的一些内容,数据库的设置一般放在model.py 下   目录下

我们设置如下的数据库:具体的代码如下面所示:

 # -*- coding: utf-8 -*-
import pdb
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class Tag(models.Model):
name = models.CharField(max_length = 30,verbose_name='标签名称') #方便在admin中查看名字
class Meta:
verbose_name = '标签'
verbose_name_plural = verbose_name
ordering = ['id'] #调用时返回自身的一些属性,注意python3用这个,python2用__unicode__
def __str__(self):
#必须返回字符串类型,str(self.id)
return self.name # 文章分类
class Category(models.Model):
name = models.CharField(max_length=30, verbose_name='分类名称')
#排序属性
index = models.IntegerField('显示顺序(从小到大)',default=999) class Meta:
verbose_name = '分类'
verbose_name_plural = verbose_name
#按照index和id属性排序
ordering = ['index', 'id'] def __str__(self):
return self.name # 用户模型
# 继承方式扩展AbstractUser,可以使用django封装好的权限等属性
# 扩展:还可以用关联方式扩展用户信息,one to one
# 两者各有优劣
class User(AbstractUser):
#头像用图片类型
avatar = models.ImageField(\
upload_to='avatar/%Y/%m', default='avatar/default.png', \
max_length=200, blank=True, null=True, 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='手机号码')
#新增字段
url=models.URLField(max_length=100,blank=True,null=True,verbose_name='个人网页地址') class Meta:
verbose_name = '用户'
verbose_name_plural = verbose_name
ordering = ['-id'] def __str__(self):
return self.username
# 自定义文章管理器
# 1.新加一个数据处理的方法(这里采用)
# 2.改变原有的Queryse方法
class ArticleManager(models.Manager):
def distinct_date(self):
distinct_date_list = []
#取出日期字段
date_list = self.values('date_publish')
for date in date_list:
#取出的日期先转换格式
date = date['date_publish'].strftime('%Y/%m文档存档')
if date not in distinct_date_list:
distinct_date_list.append(date)
return distinct_date_list
# 文章模型
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='分类')
#多对多关系将会自动多生成一张表,blog_article_tag
tag = models.ManyToManyField(Tag, verbose_name='标签')
#在文章模型中加入自定义的管理器
objects = ArticleManager() class Meta:
verbose_name = '文章'
verbose_name_plural = verbose_name
ordering = ['-date_publish'] def __str__(self):
return self.title
# 自定义评论管理器
# 为了写入原生sql,返回按article分组统计排序的方法
class CommentManager(models.Manager):
def with_counts(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute("""
select article_id from blog_comment
group by article_id
order by count(article_id)
desc
""")
result_list = []
#pdb.set_trace()
#取出来的是元组类型
for row in cursor.fetchall():
id = row[0]
result_list.append(id)
return result_list
# 评论模型
class Comment(models.Model):
content = models.TextField(verbose_name='评论内容')
username = models.CharField(max_length =\
30,blank=True,null=True,verbose_name='用户名')
email = models.EmailField(max_length=50,blank=True,null=True,verbose_name='邮箱地址')
url =\
models.URLField(max_length=100,blank=True,null=True,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,related_name="entries", blank=True, null=True, verbose_name='文章')
pid = models.ForeignKey('self', blank=True, null=True, verbose_name='父级评论')
# 使用自定义的管理器
objects = CommentManager() class Meta:
verbose_name = '评论'
verbose_name_plural = verbose_name
#按发布日期倒序排列
ordering = ['-date_publish'] def __str__(self):
return str(self.content) # 友情链接
class Links(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 __str__(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 = u'广告'
verbose_name_plural = verbose_name
ordering = ['index', 'id'] def __str__(self):
return self.title

接着我们要在setting 文件中配置我们数据库的一些信息具体的代码如下

 DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blogdb',
'USER':'root',
'PASSWORD':'zxsoft0#',
'HOST':'192.168.1.111',
'PORT':'', }
}

然后生成数据库,设置admin   设置admin  超级管理员:

python manage.py syncdb

注意:Django 1.7.1及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate

5. 清空数据库

1
python manage.py flush

此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。

6. 创建超级管理员

1
2
3
4
5
6
python manage.py createsuperuser
 
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
 
# 修改 用户密码可以用:
python manage.py changepassword username

最后在setting里面设置新的用户模型

#自定义用户model
AUTH_USER_MODEL = 'blog.User'

django 之数据库模块的更多相关文章

  1. python学习笔记--Django入门三 Django 与数据库的交互:数据建模

    把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式.在这个模式中, Model 代表数据存取层,View 代表的是系统中 ...

  2. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  3. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...

  4. Django搭建数据库

    ---恢复内容开始--- 一.form表单提交数据的三个要素 1.form标签必须要有action个和method属性 2.所有获取用户输入的标签必须放在form表单中,必须要有name属性 3.必须 ...

  5. 让Django支持数据库长连接(可以提高不少性能哦)

    书接上回 上回我们说到:<在生产系统使用Tornado WebServer来代替FastCGI加速你的Django应用> 那么现在很流行用一些高性能的nonblock的app server ...

  6. Django之 数据库ORM

    一.ORM Django的 业务 少不了 跟数据库打交道,不然没有数据库保存一些数据将是一件很糟糕的事情.Django 对 数据库 支持原生的 SQL语句,但更好的对数据库支持,Django自己有一套 ...

  7. 第二章、Django以及数据库的配置

    目录 第二章.Django以及数据库的配置 一.小白必会三板斧 二.静态文件配置 三.form表单 action和method参数可以写的形式 四.request对象及方法 五.django连接数据库 ...

  8. 跨站请求伪造(csrf),django的settings源码剖析,django的auth模块

    目录 一.跨站请求伪造(csrf) 1. 什么是csrf 2. 钓鱼网站原理 3. 如何解决csrf (1)思路: (2)实现方法 (3)实现的具体代码 3. csrf相关的装饰器 (1)csrf_p ...

  9. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

随机推荐

  1. 怎样验证layer.prompt输入的值为数值型???

    JS中使用isNaN()判断layer.prompt输入的值为数值型,代码如下: layer.prompt({ title: '设置比值', }, function(value, index, ele ...

  2. 路飞学城Python-Day34

    01-MySQL-开篇 数据库:数据库就是数据存储的仓库,数据想要永久存储只能放在文件中,如果忽略文件的存储的效率问题,文件的组件全部都存放在一台机器上,那么文件数据就可以存储在一台机器上,但是这样做 ...

  3. video标签实现简单视频背景+遇到问题(视频无法显示,不能自动播放)

    最近看网上有一些网站首页背景是炫酷的视频背景,就想模拟一个 1.video标签简介 video标签定义视频,就是可以在网页上实现视频的播放,详情见http://www.w3school.com.cn/ ...

  4. 线性回归(regression)

    简介 回归分析只涉及到两个变量的,称一元回归分析.一元回归的主要任务是从两个相关变量中的一个变量去估计另一个变量,被估计的变量,称因变量,可设为Y:估计出的变量,称自变量,设为X. 回归分析就是要找出 ...

  5. 【转】 C#获取当前程序运行路径的方法集合

    [转] C#获取当前程序运行路径的方法集合 //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembly.Location; resul ...

  6. 自己主动化測试程序之中的一个自己定义键盘的模拟測试程序(C语言)

    一.測试程序编写说明 我们做的终端设备上运行的是QT应用程序.使用自己定义的键盘接口.经过測试人员长时间的人机交互測试,来确认系统的功能是否满足需求. 如今须要编写一个自己主动化的測试程序,能够依照预 ...

  7. python实战之编码问题:中文!永远的痛

    编码的思维图谱: 也就是说文件没有编码之说,事实上都是按二进制格式保存在硬盘中的.不过在写入读取时须使用相应的编码进行处理,以便操作系统配合相关软件/字体,绘制到屏幕中给人看.所以关键问题是得知道原先 ...

  8. hdoj-1312-Red and Black

    Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  9. Oracle 学习笔记 14 -- 集合操作和高级子查询

    Oracel提供了三种类型的集合操作:各自是并(UNION) .交(INTERSECT). 差(MINUS) UNION :将多个操作的结果合并到一个查询结果中,返回查询结果的并集,自己主动去掉反复的 ...

  10. Mosquito的优化——epoll优化(七)

    本文由逍遥子撰写,转发请标注原址: http://blog.csdn.net/houjixin/article/details/46413583 或 http://houjixin.blog.163. ...