后台采用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. php链接数据库

      1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ...

  2. 素数环 Primg Ring Problem

    素数环 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/C 题意: 输入正整数n,把整数1~n组成一个 ...

  3. css设置移动端checkbox和radio样式

    复选框Checkbox是Web应用常用控件,随处可见,原生的复选框控件一般就像下面这样: 这取决于操作系统和浏览器,有些时候,这种样子并不能满足设计要求,这时需要更为精致的复选框样式.以往只有少数浏览 ...

  4. js 页码分页的前端写法

    <script type="text/javascript"> var curPage = 1;//当前页码 var total;//总页数 $(function () ...

  5. JSON与DataTable(DataSet)相互转化

    public static string CreateJsonParameters(DataTable dt)        {            /* /******************** ...

  6. html - 自动播放音乐

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 20145334赵文豪 《Java程序设计》第4周学习总结

    20145334赵文豪 <Java程序设计>第4周学习总结 教材学习内容总结 第六章知识点总结 1-继承共同行为:如果在程序设计上存在着重复,那就需要修改,可以吧相同的程序代码提升(pul ...

  8. 代理模式 & Java原生动态代理技术 & CGLib动态代理技术

    第一部分.代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常 ...

  9. IOS第一天多线程-04GCD通信

    **** #define HMGlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) #define HMM ...

  10. 【iCore3 双核心板_ uC/OS-III】例程五:软件定时器

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