后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤:

1,需求分析,这点子不用多说,而我也深刻体会到了没有原型的时候就开始开发的困难之处,每次需求更改就会带来后台的数据和对应接口的一次变更.费时费精力

2.有了需求,那么开始数据库的设计,在Django中,并不需要直接去操作数据库,而且使用继承modesl.Model的类,在类中定义自己的模型,然后使用Python manage.py syncdb就可看到数据库中的表了(先得在settings中设定好和数据库的连接)

3.主要说的是用户的定义问题,我采用的是比较老的方式,使用profile扩展,并没有采用继承抽象用户类的方式.

用户的模型Django已经帮我们集成了,我们要做的就是在自带的用户系统上扩展自己的数据,扩展方法如下:

class UserProfile(models.Model):
# 账号附加信息
user = models.OneToOneField(User,unique=True)
#下面定义一些自己的附加信息,比如性别等等

采用的是一对一的方式,而这种方式使用起来也很简单,比如使用User.objects.get得到了一个user,然后直接访问user.userprofile.属性就可以,userprofile是自己定义的扩展表的名称(Django1.5之前的老版本使用的是user的get_profile函数,但是官方推荐在新版本中时候类的方式访问)

  用户扩展到这里完成,而我们也可以使用Django带的auth系统,无需去关注cookies等细节了

数据库使用过程中注意的问题:

  1,创建用户必须使用User.objects.create_user官方提供的函数,不然auth的认证系统无法通过,而且通过这种方法创建的用户,密码是通过加密的,所以推荐有官方的api的时候就是用官方api,不然可能会造成框架的一些模块无法使用

  2.数据库编码务必采用utf-8

  3.官方自带的数据库抽象层由于其具有通用性,所以直接使用起来还是比较麻烦的,比如更改用户数据就必须同时去操作user和Userprofile两个表,所以这个时候我们可以在官方的抽象层上再写一层接口(调用的是Django自带的数据库抽象层),使得数据库接口更加切合业务逻辑(这样做相当于隔离了Django的数据库抽象层,使用起来更加方便).

  4.前后台通信是做前台和后台的交互的大问题,虽然Django自带了表单系统,但是对于前台来说,使用起来还是不习惯的,所以我放弃了Django的表单系统,前后台通信采用纯粹的变量,由于部分数据过多,而且通过模版渲染时的上下文传递也显得比较麻烦,所以就在自己写的接口上(3提到的屏蔽Django抽象层的接口)需要的函数,然后使用ajax的方式返回xml信息交给前台,也可以统一采用xml通信,但是由于Django的{{}}标签方式对于有些变量的传递还是非常方便的,所以就混合起来用了.

Django开发笔记之数据库的设计的更多相关文章

  1. Django开发笔记五

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...

  2. Django开发笔记一

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.运行 python manage.py runser ...

  3. Django开发笔记(一)

    Django开发笔记(一) 标签(空格分隔): Django Python 1. 创建并运行Django项目 创建开发环境 安装Django pip install django==version 执 ...

  4. Django开发笔记六

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...

  5. Django开发笔记四

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...

  6. Django开发笔记三

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...

  7. Django开发笔记二

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...

  8. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  9. Django学习笔记之数据库-数据库与模型

    MySQL数据库 在网站开发中,数据库是网站的重要组成部分.只有提供数据库,数据才能够动态的展示,而不是在网页中显示一个静态的页面.数据库有很多,比如有SQL Server.Oracle.Postgr ...

随机推荐

  1. 使用shell操作mysql(转)

    在linux平台下,为避免每次操作数据库(mysql)都要进入Mysql命令模式下,可以使用Shell命令直接操作数据库. 一.直接写sql语句 if [ $# -ne 1 ] then        ...

  2. OpenCV 3.0 CvMat and cv::Mat Conversion

    After OpenCV 3.0, CvMat cannot be directly converted to cv::Mat, we need to use function cvarrToMat( ...

  3. [CareerCup] 18.2 Shuffle Cards 洗牌

    18.2 Write a method to shuffle a deck of cards. It must be a perfect shuffle—in other words, each of ...

  4. TestStand与LabVIEW UI 交互

    交互起因 客户觉得TestStand界面复杂,希望一个简单的界面即可进行序列执行,采用LabVIEW调用TestStand引擎可实现快速设计,将TestStand拆解到LabVIEW.然而,这样做需要 ...

  5. HDU 4006 优先队列

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  6. 64位虚拟机安装64位ubuntu出现问题

    virtualbox 出现this kernel requires an an x86-64 cpu 错误 如题,但是主机是win8 64位,使用virtualbox安装ubuntu-12.04.3- ...

  7. 将CachedRowSet中的数据转储到对象中

    虽然还有很多bug,但凑合能用,就是将CachedRowSet中的数据转换成对象或List.省去了繁琐难看的一系列get/set方法. 先说调用: 注: cachedRowSet是查询的结果集 Stu ...

  8. 【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯

    实验指导书及代码包下载: http://pan.baidu.com/s/1dEnH5dB iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  9. 【iCore3 双核心板_FPGA】实验十九:基于双口RAM的ARM+FPGA数据存取实验

    实验指导书及代码包下载: http://pan.baidu.com/s/1pLReIc7 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  10. GDC2016【For Honor-荣耀战魂】的次世代动画技术

    生成自然丰富,反应灵敏的动作的“Motion Matching”是什么?         Ubisoft在2016年内预定发售的[荣誉战魂],是基于MOBA类集团战斗,并加入了高度紧张的剑斗动作的多人 ...