后台采用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. MVVM Command Binding: InvokeCommandAction v.s. EventToCommand

    This gives you the ability to create a trigger on an event and bind it to an ICommand on the view mo ...

  2. 【android tools】内存、网络、界面性能响应优化的工具

    一.性能优化工具 性能分析,我理解有内存性能,IO性能, 界面性能,耗电等. 内存性能,用debuggable的app结合mat等专业工具可以分析.另外最近的Leakcanary很好用,但是要手动加入 ...

  3. Java 中的 Characters

    1.一般情况下,如果使用单一的 character 值,应该使用原始的 char 类型.比如: public class TestCharacter { public static void main ...

  4. Js变量定义——fn里 var与不var的区别

    js运行时内置了一个Global对象. 这个Global对象跟运行环境有关.在浏览器运行环境中.Global就是window对象.在nodejs中.Global对象是global对象. 当你在浏览器环 ...

  5. javascript中的删除方法

    可能呢再开发的过程中呢使用的不是很多,但是碰上呢可以注意下 1.比如: var x = 10; delete x; console.log(x); 结果是多少,是10,不是异常也不是undefined ...

  6. 【翻译】How To Tango With Django 1.5.4 第三章

    django基础 3.1测试你的配置 测试你的python版本和你的django版本是否兼容 3.2新建django工程 在dos里面进到你事先新建的code文件夹,然后在执行下列命令新建工程 c:\ ...

  7. android中View的GONE和INVISIBLE的原理

    废话只重复两句: GONE真的隐藏: INVISIBLE不可见但是预留了View的位置: 网上千篇一律的重复着这两句话并举着例子,并没有观察本质来作区分.查看源码后得知其区别希望广大朋友能够借鉴,源码 ...

  8. winform最小化后隐藏到右下角,单击或双击后恢复 .

    01.//先拖一个notifyIcon控件进来 02. 03.//然后在您的notifyIcon控件中添加 MouseDoubleClick事件,代码如下 04. 05. private void n ...

  9. UIView 的autoresizingMask属性

    autoresizingMask属性的意思就是自动调整子控件与父控件中间的位置,宽高,定义如下: typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) ...

  10. C++程序设计(三)

    1. 运算符重载 目的:对抽象数据类型也能够直接使用C++提供的运算符.使得程序更简洁,代码更容易理解. 运算符重载的实质是函数重载 返回值类型 operator 运算符(形参表) { -- } 运算 ...