MVC介绍 Django生命周期 many-to-many One-to-many Django常用字段 CharFiled 需要有max_length unique=True(代表不能重名) EmailFiled URLField ManyToManyField(哪个表) #多对多的关系 ForeignKey(哪个表) #一对多的关系 DateTimeField #精确到秒或者分 DateField #精确到天 == DurationField DecimalField #小数 FloatField SmallIntegrField TextField TimeField =======常用的属性=== unique null=True 数据库那里可以为空,默认不能为空。数据库可以为空,前端不行。加上blank=True blank=True 前端那里可以为空,限制的是Django admin verbose_name=u'中文傻傻' #把字段在前端用中文显示 choices db_index #给字段做索引(不常用) editable=False #Django前端页面某项不能修改,消失了。。。。 error_messages help_text="help.....dddddd....." #前端告诉用户怎么填,地下出现写的提示 ========= 一个表对应一个类 class Author(models.Model): #作者表 first_name = models.CharFiled(max_length=32,unique=True) last_name = models.CharFiled(max_length=32) class Meta: verbose_name_plural = u'作者' #在Django中的前端把表名用中文显示 def __unicode__(self): #py3.0的是 __str__ return 'xxxx' ====== python manager.py migrate makemigrations #做检查生成SQL语句 migrate #执行 ========== 前端admin默认不出现准确字段,(出现的是XXX object, 如果想看到显示的具体是什么,需要在类下写 def __unicode__(self): #py3.0的是 __str__ return "" ========================================================================= 上面用了Django的admin对数据库进行操作,下面是常用命令的方式 导入models模块 默认不配置环境变量是不能导入的,可以用调试模式,如下 python manager.py shell #进入调试模式 from app01 import models models.Author.objects.all() #查找所有 last() #查找最后 修改: 先找到,在修改 改完保存 a1 = models.Author.objects.last() a1.last_name = "xxxxx" a1.save() 创建 new_author_obj = models.Author(first_name="NewNname",last_name="NewLastName") new_author_obj.save() 第二种创建方式不用在保存一次 直接会保存 new_author_obj = models.Author.objects.create(first_name="NewNname2",last_name="2NewLastName") 过滤 models.Author.objects.filter(last_name="NewLastNname",first_name="NewNname") 模糊过滤 两个下划线 __contains 大小写忽略 __icontains id__range=[2,4] 取id的 models.Author.objects.filter(last_name__contains="NewLastNname") 批量修改 .update models.Author.objects.filter(last_name__icontains="NewLastNname").update(last_name=“hhh”) 连锁查询 order_by 查询书有多少个作者 b1 = models.Book.objects.last() b1.authors 这个时候返回出现的是一个对象,类似于<xxxxx object at xxxxx>,如果想正常显示,需要加select_related() b1.authors.select_related() 删除 b1.deleted()
Django forms http://www.cnblogs.com/BeginMan/archive/2013/09/06/3306081.html 1、特点 django forms是Django的表单处理库。依赖HttpRequest,它具有如下特点: (1)、快速自动生成HTML表单 (2)、表单数据校验 (3)、错误信息提示 (4)、自动转换为python数据格式 Django中的Form一般有两种功能 1、输入HTML,自动生成前端表单 2、验证用户输入,验证输入的合法性 使用 1:单独创建一个forms文件, from django import forms class BookForm(forms.Form): name = forms.CharField(max_length=10) ...... 2:在views里把创建的forms返回给前端, form.is_valid 验证数据 form.cleaned_data 获取干净的数据 去掉html那些没用的 from app01 import forms def book_form(request): form = forms.BookForm() #生成实例 return render(request,'app01/book_form.html', {'book_form':form }) 3:然后前端调用 book_form,单独取一个值,就是{{book_form.name}} {{book_form}} 具体事例 <form action="" method="post">{% csrf_token %} #建立form表单 做提交用 和 Ajax差不多 {{book_form}} <input type="submit" value = "创建"> </form> Blog和Entry有外键关联 一对多的反向查询 class Blog: pass class Entry: blog = modles.ForeignKey(Blog) 通过Entry获取Blog name 为XXX的字段 models.Entry.objects.get(blog__name="xxxx") 另一种反向关联查询)跟这个出版社相关的书都查出来 class Publiser(models.Models): pass class Book(models.Models): publiser = models.ForeignKey(Publiser) pub_obj = models.Publiser.objects.last() print(pub_obj.book_set.select_related()) 查询某个字段的值小与某某个字段的值 ORM F语句 >>> from django.db.models import F >>> Entry.objects.filter(n_comments__gt=F('n_pingbacks')) ORM Q语句 满足第一个and满足第二个,满足第二个的第一个或第二个 Poll.objects.get( Q(question__startswith='Who'), Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) ) 统一自增 models.Entry.objects.update(n_pingbacks=F('n_pingbacks')+1) 表内分类聚合 values_list annotate分类统计(分类统计各项资产服务器、网络设备各有多少台) models.Book.objects.values_list('publish_date').annotate(Count('publish_date')) OneToOneField和ForeignKey的区别 一对一和一对多 Djanog admin内显示中文 class Meta: verbose_name = u'班级列表' verbose_name_plural = u'班级列表' #复数形式 unqiue_together = ('course','course_type','semester') #联合为一 在自己的脚本里调用 Django models 加上环境变量就ok了 import os os.environ['DJANGO_SETTINGS_MODULE'] = 's12day16.settiongs' #s12day16 是你的setting所在的项目名 import django django.setup() form blog import models entry = models.Entry.objects.get(pk=1) print(entry)
Django用户认证系统 扩展 Django用户认证系统 先继承 在扩展 from django.contrib.auth.models import User class UserProfile(models.Model): user = models.OneToOneField(User) #通过一对一的方式 引用 Django的用户认证系统,然后下面的去扩展name school...... name = models.CharField(max_length=64) school = models.ForeignKey('School') Django中构建表结构 自己关联自己,见例子第一个视频35分钟处。 models.ForeignKey('self' ,blank = True,null = true) #自己的这个表还没创建,所以就要用引号括起来 让字段在admin上显示中文 verbose_name = u'汉字' consultant = models.ForeignKey('UserProfile',verbose_name=u'汉字') 或者 date = models.DateField(u'汉字',auto_now_add = True) #把u‘汉字’放到前面 Django中引用Bootstrap 1修改url,在主的URL下的跳转到单独项目上自己控制 url(r'^crm/', include('crm.urls') 2子项目里添加url文件,定义views文件的逻辑关系 url(r'^$',views,dashboard) 新建statics目录,下载Bootstrap添加进去 3修改 settings文件,添加如下: STATICFILES_DIRS = [ os.path.join(BASE_DIR,"static") #'/var/www/static/' #可以写很多个从第一个开始找,直到最后 ] 4前端文件 引用 /static/bootstrap/css/.... static而不是statics 这样就无需关系 statics目录修改后在去找前端一个个的修改