今日主题

  • 定义博客文章和评论的的数据库定义

  • 定义操作这几个Model的后台数据

User表

USER_STATUS = (
('active', u'激活'),
('suspended', u'禁用'),
('deleted', u'注销'),
)
class Users(models.Model):
username = models.CharField(u'用户名', unique=True, max_length=20)
password = models.CharField(u'密码', max_length=128)
nickname = models.CharField(u'昵称', max_length=50, blank=True)
avatar = models.ImageField(u'头像', upload_to='avatar/%Y/%m', max_length=100, blank=True, null=True)
display = models.CharField(u'显示名', max_length=100, blank=True)
email = models.EmailField(u'邮箱', max_length=255, blank=True)
url = models.URLField(u'个人主页', max_length=255, blank=True)
created_at = models.DateTimeField(u'创建时间', auto_now_add=True)
activation_key = models.CharField(u'激活码', max_length=60, blank=True)
status = models.CharField(u'状态', max_length=10, default='active', choices=USER_STATUS)

这里简单说明一点点,Django里面很少用到纯粹的sql.基本上都是用Django封装的orm来干这些事情.

SQL里面的数据字段的类型在Django里面也一一对应了的,上面的User模型定义里面的CharField,IntegerField,DateTimeField等分别对应了SQL里面的字符型,整型和日期型的数据格式,

EmailField,URLField等则是Django扩展出来的字段,实际上也相当于char型的字段(多了些特定的限制而已)

扩展阅读

Model field

这一部分应该来说是比较基础也比较重要的,务必应当熟悉各个字段的使用以及相应的属性.

当然,如果有SQL基础,那更是驾轻就熟.

这里还有一点需要提醒注意的是,avatar字段使用了ImageField,并且在其属性中给定了upload_to字段.那么我们在settings.py中就需要额外的为之设定一个图片存储路径.这样图片在上传的时候就会从

settings查找MEDIA_ROOT,并将图片至于其中, 可能细心的你还注意到了在设定upload_to字段的值上面

avatar/%Y/%m 这样最终生成的图片路径就应该是这样的 /path/to/upload/avatar/2015/01/xx.jpg

(假设选定了一张名为xx.jpg作为头像上传了).

# settings.py
# 设定图片上传路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
if not os.path.exists(MEDIA_ROOT):
os.mkdir(MEDIA_ROOT)

Posts表

def _make_uuid():
return str(uuid.uuid4()).replace('-', '').lower() POST_STATUS = (
('publish', u'发布'),
('auto-draft', u'草稿'),
('inherit', u'继承'),
)
COMMENT_STATUS = (
('open', u'公开'),
('closed', u'私密'),
)
class Posts(models.Model):
title = models.CharField(u'标题', max_length=200)
seed = models.CharField(max_length=40, default=_make_uuid)
author = models.ForeignKey('Users', to_field='username')
name = models.SlugField(u'别名', max_length=200, blank=True)
date = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
excerpt = models.TextField(u'摘要')
content = models.TextField(u'正文')
status = models.CharField(u'发布状态', max_length=20, default='publish', choices=POST_STATUS)
comment_status = models.CharField(u'评论状态', max_length=20, default='open', choices=COMMENT_STATUS)
password = models.CharField(u'密码', max_length=20, blank=True)
comment_count = models.IntegerField(u'评论', max_length=20, default=0)
read_count = models.IntegerField(u'阅读', max_length=20, default=0)

Posts表用来存储博客的文章,心情随笔等等.所以像标题 内容 发布时间 修改时间等等的都是必不可少的

Comments表

class Comments(models.Model):
post = models.ForeignKey('Posts')
parent = models.ForeignKey('self', blank=True, null=True)
author = models.ForeignKey('Users')
author_name = models.CharField(max_length=20, blank=True)
author_email = models.CharField(max_length=255, blank=True)
author_url = models.URLField(max_length=255, blank=True)
author_IP = models.GenericIPAddressField(unpack_ipv4=True, blank=True, null=True)
date = models.DateTimeField(auto_now_add=True)
content = models.TextField()

Links表

LINK_VISIBLE = (
('Y', u'可见'),
('N', u'不可见'),
)
class links(models.Model):
owner = models.ForeignKey('users')
url = models.URLField(max_length=255)
name = models.CharField(max_length=255)
image = models.CharField(max_length=255, blank=True)
target = models.CharField(max_length=25, blank=True)
description = models.CharField(max_length=255, blank=True)
visible = models.CharField(max_length=20, default='Y', choices=LINK_VISIBLE)
date = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
rating = models.IntegerField(default=0)

这些天有些冷,人都变得倦怠了.应该自我检讨一下了.

附带一笔记录一下今天使用Django form的一点笔记:

此处以Users为例,小叙一下通过Django自定义的表单进行数据验证

# 1
from django.forms import forms class UserForm(forms.ModelForm):
class Meta:
model = models.Users
fields = ['username', 'password']

最简单的一个Form就这么华丽丽的完成了,

models.Users 指定模型

fields 指定必要字段

然后在后台的views中就可以直接调用这个写好的Form对数据进行验证了,当然,同样也可以利用它生成表格输入框

进一步深入, 自定义字段验证

# 1
from django.forms import forms class UserForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
# 为什么没有**kwargs, 是不是去读读源码?
super(UserForm, self).__init__(*args)
# do something with sth in kwargs def clean(self):
# 让自带的方法帮我们验证剩余的字段
cleaned_data = super(UserForm, self).clean() username = cleaned_data.get('username')
if 'ooxx' in username:
self._errors['username'] = u'名字太黄了,禁止注册!'
del cleaned_data['username'] pwd = cleaned_data.get('password')
if len(str(pwd)) < 4:
self._errors['password'] = u'那啥太短了,密码太短了.'
del cleaned_data['password'] # .... return cleaned_data class Meta:
model = models.Users
fields = ['username', 'password', 'email']

再简单的写一个后台的用户注册和编辑的views

# users.py
from django.shortcuts import RequestContext
from django.shortcuts import render_to_response from blog import models
from blog import forms def add(request, *args, **kwargs):
if request.method == 'POST':
form = forms.UserForm(request.POST)
if form.is_valid():
user = form.save()
return render_to_response('core/user.html', {'user': user}, context_instance=RequestContext(request))
else:
return render_to_response('core/register.html', {'form': form}, context_instance=RequestContext(request))
form = forms.UserForm()
return render_to_response('core/register.html', {'form': form}, context_instance=RequestContext(request)) def edit(request, *args, **kwargs):
username = request.POST.get('username', None)
if username:
obj = models.Users.objects.get(username=username)
form = forms.UserForm(request.POST, instance=obj)
if form.is_valid():
form.save()
return render_to_response('core/user.html', {'user': user}, context_instance=RequestContext(request))
return render_to_response('core/edit.html', {'form': form}, context_instance=RequestContext(request))

用Django搭建个人博客—(3)的更多相关文章

  1. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  2. python关于Django搭建简单博客项目(详解一)

    上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答.本文没有特定顺序,请结合上一篇和源代码参照学习. 相关源代码和解析请参看:https://github.com/Cheng0829/mysi ...

  3. 用Django搭建个人博客—(1)

    业精于勤荒于嬉,形成于思毁于随. 本阶段的任务小记: 简单介绍一下Django的使用,创建项目和一个app 简单介绍一下Django的settings.py文件的相关配置 整合数据库到自己的博客系统中 ...

  4. python关于Django搭建简单博客项目(教程)

    由于csdn各种django blog博文都有或多或少的bug,所以我决定自己写一篇,先附上教程,详解在另一篇博文里,为了便于大家复制粘贴,本文代码尽量不使用图片. 源代码及解析文章请在我的githu ...

  5. Django 搭建简易博客

    新增一个 APP 博客算是一个功能集,因此我们应将其体现为一个模块.这表现在 Django 应用里则是为其创建一个 APP Package.现在让 manage.py 中的 startapp 闪亮登场 ...

  6. 用Django搭建个人博客—(2)

    今日任务: 1 blog的数据库模型定义 2 简单的注册登录功能的实现 项目的源文件已经推送到git@oschina.net. 所以,如果想要参阅源码的请移步 (Fork) http://git.os ...

  7. Django搭建简易博客教程(四)-Models

    原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...

  8. python关于Django搭建简单博客项目 详解二-setting.py

    这一篇我们来讲解setting.py,具体内容以注释形式写入到下面的setting.py代码中,篇幅所限已把官方所给英文注释删除. 全部源代码和详解请参看http://github.com/Cheng ...

  9. 基于django的个人博客网站建立(一)

    基于django的个人博客网站建立(一) 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页,后来由于换了个系统,感觉弄的有点麻烦也就没有再去管它了,最近偶然从网 ...

随机推荐

  1. 微信开发第6章 通过accesstoken获取用户粉丝列表

    上一章我们讲解到open_id获取用户基本信息,那么open_id哪儿来的呢?就是粉丝列表中可以看到的.本次讲解如何获取粉丝列表. 获取粉丝列表 可以查看文档 http://mp.weixin.qq. ...

  2. 非常实用的PHP常用函数汇总

    这篇文章主要介绍了非常实用的PHP常用函数,汇总了加密解密.字符串操作.文件操作.SQL注入等函数的实例与用法说明,在PHP项目开发中非常具有实用价值,需要的朋友可以参考下 本文实例总结了一些在php ...

  3. struts2标签 遍历map集合

    首先我们来构造几个map集合.    假设如下代码 都是在ssh配置环境下搭建好,(至少struts2开发环境搭建好) (1).java 代码          下面的student对象包含的字段为 ...

  4. Excel异常Cannot get a text value from a numeric cell

    POI操作Excel时数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时,就会出现Cannot get a text value from a numeric ...

  5. [Node.js] Exporting Modules in Node

    In this lesson, you will learn the difference between the exports statement and module.exports. Two ...

  6. hdu2044java递推

    一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  7. Ⅱ.AngularJS的点点滴滴--缓存

    模板缓存-$templateCache and 缓存工厂 $cacheFactory 1.使用script标签 <html ng-app> <script src="htt ...

  8. javascript中的函数返回值(return)

    有些情况,我们希望获取到函数的执行结果,也就是我们需要在函数以外的地方处理执行结果,而不是在函数内部处理.这时我们就需要为函数设一个返回值,也就是return,即函数执行完毕以后返回的结果. 若在函数 ...

  9. DEDE自带的采集功能,标题太短的解决方法

    DEDE自带的采集功能,标题太短获取不全的解决方法搜索了好多之后,终于还是在dede的官方论坛找到了答案.增加采集标题长度:255  目的:原标题长度太小,影响文件采集⑴修改系统参数设置(文档标题最大 ...

  10. 使用Github建立个人博客

    总的说来 这个当有node.js 和gitbub的账号后,搭建一个自己的博客,想想还是挺美的事! 由于要把整个流程说清楚 估计lz还没这个实力,所以都是继承前辈们的经验,自己再添加一点遇到的问题和解决 ...