Django开发笔记之数据库的设计
后台采用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开发笔记之数据库的设计的更多相关文章
- Django开发笔记五
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...
- Django开发笔记一
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.运行 python manage.py runser ...
- Django开发笔记(一)
Django开发笔记(一) 标签(空格分隔): Django Python 1. 创建并运行Django项目 创建开发环境 安装Django pip install django==version 执 ...
- Django开发笔记六
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...
- Django开发笔记四
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...
- Django开发笔记三
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...
- Django开发笔记二
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...
- Django 学习笔记之三 数据库输入数据
假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...
- Django学习笔记之数据库-数据库与模型
MySQL数据库 在网站开发中,数据库是网站的重要组成部分.只有提供数据库,数据才能够动态的展示,而不是在网页中显示一个静态的页面.数据库有很多,比如有SQL Server.Oracle.Postgr ...
随机推荐
- CAS单点登录中文用户名乱码问题
CAS单点登录中文用户名乱码问题,有两种情况 1. CAS server乱码 即在向server端提交用户名和密码时,发生了乱码,解决方法是: 打开WEB-INF/web.xml,在其它的Filter ...
- 19.创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
package zuoye2; public class People { protected double height; protected double weight; private Stri ...
- ado.net 连接,删除,添加
ado.net数据库访问技术将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 数据库: create data ...
- thinkphp多模板布局设置!!
首先开启模板布局要在配置文件添加: 'LAYOUT_ON'=>true, 'LAYOUT_NAME'=>'layout', 如果需要设置多个布局模板,就要先关闭上面的LAYOUT_ON,也 ...
- Linux下动态库(.so)和静态库(.a) 的区别
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.编译之后程序文件大,但加载快,隔离性也好.动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还 ...
- Trie树
一.什么是trie树 1.Trie树 (特例结构树) Trie树,又称单词查找树.字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构.典型应用是用于统计和排序大量的字符串( ...
- openstack-flat 网络问题
使用packstack安装,版本为M,默认为vxlan网络, 操作系统为centos7. 由于学习的需要修改为flat网络. 首先修改配置文件: /etc/neutron/plugins/ml2/ml ...
- app启动调用的api
(8)在app启动时,调用一个初始化api获取必要的信息 通过这个初始化api,获取一下必要的信息,例如,最新的app版本.当发现本地app的版本已经低于最新的app版本,可提示用户更新.当然了,这个 ...
- JS判断终端设备跳转PC端、移动端相应的URL
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...
- LR之Java Vuser
虽然LR对C有较好的支持,但有时使用Java Vuser会更方便,以下描述通过LR来编写Java脚本以及调用jar包的基本步骤. 1.安装配置java环境 LR的java vuser脚本的执行依赖于 ...