码迷,mamicode.com
首页 > 其他好文 > 详细

Django框架基础(二)

时间:2017-07-02 15:17:02      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:efi   pat   捕捉异常   rbo   ble   操作   内容   select   mod   

MODELS

技术分享
 1    对数据库起效的字段设置:
 2         数据类型:CharField
 3                   IntegerField
 4                   FloatField
 5                   DecimalField(max_digits=30,decimal_places=10)
 6                   DateTimeField
 7 
 8 
 9         字段参数:null=True  default=‘‘   unique=True   db_index=True  premary_key
10         class Meta:
11         unique_together=(
12             (email,ctime)
13         )
14         index_together=(
15             (email,ctime)
16         )
17 
18    对admin起效的字段设置:
19          数据类型:
20                字符串:
21             EmailField(CharField):
22             IPAddressField(Field)
23             URLField(CharField)
24                     SlugField(CharField)
25             UUIDField(Field)
26             FilePathField(Field)
27             FileField(Field)
28             ImageField(FileField)
29             CommaSeparatedIntegerField(CharField)
30 
31                 枚举:
32                      color_list = (
33                     (1,黑色),
34                     (2,白色),
35                     (3,蓝色)
36                         )
37              color = models.IntegerField(choices=color_list)
38                      应用场景:选项固定
39                                 
40              PS: FK选项动态
41          字段参数:
42                  verbose_name        Admin中显示的字段名称
43                  blank               Admin中是否允许用户输入为空
44                  editable            Admin中是否可以编辑
45                  help_text           Admin中该字段的提示信息
46                  choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
47                  test=models.CharField(
48                      max_length=32,
49                      error_messages={
50                         c1:优先错误信息
51                            },
52                      validators=[RegexValidator(regex=root_\d+,message=error,code=c1)],
53                      null=True
54     )
字段

参考博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html

技术分享
 1 class Userinfo(models.Model):
 2     username=models.CharField(max_length=32)
 3     password=models.IntegerField(max_length=16)
 4 
 5     email=models.EmailField(null=True,default=1111,unique=True,blank=True,verbose_name=邮箱)
 6     ctime=models.DateTimeField(null=True)
 7     test=models.CharField(
 8         max_length=32,
 9         error_messages={
10             c1:优先错误信息
11         },
12         validators=[RegexValidator(regex=root_\d+,message=error,code=c1)],
13         null=True
14     )
15     color_list=(
16         (1,black),
17         (2,white),
18         (3,blue),
19     )
20     color=models.IntegerField(choices=color_list)
21 
22     class Meta:
23         unique_together=(
24             (email,ctime)
25         )
26         index_together=(
27             (email,ctime)
28         )
View Code

 

ORM数据表多对多操作:

1 自定义第三张表:

技术分享
 1     class Gril(models.Model):
 2     nick=models.CharField(max_length=64)
 3 
 4 
 5     class Boy(models.Model):
 6     name=models.CharField(max_length=64)
 7 
 8     class Love(models.Model):
 9     b=models.ForeignKey(Boy)
10     g=models.ForeignKey(Gril)
11     class Meta:    #设置联合唯一索引
12         unique_together=[
13             (b,g),
14         ]
15 
16  查询和Alex1 有关系的姑娘
17         obj=models.Boy.objects.filter(name=alex1).first()
18         love_list=obj.love_set.all()
19         for row in love_list:
20             print(row.g.nick)
21 
22         love_list=models.Love.objects.filter(b__name=alex1)
23         for row in love_list:
24             print(row.g.nick)
25 
26         love_list=models.Love.objects.filter(b__name=alex1).values(g__nick)
27         for item in love_list:
28             print(item[g__nick])
29 
30         love_list=models.Love.objects.filter(b__name=alex1).select_related(g)
31         for obj in love_list:
32             print(obj.g.nick)
View Code

2 Django自动生成关系表:

技术分享
 1 class Gril(models.Model):
 2     nick=models.CharField(max_length=64)
 3     m=models.ManyToManyField(Boy)               #Django内置的多对多连表设置
 4 
 5 django 内置的多对多连表操作,不能直接对连表进行操作,可以间接操作
 6         # obj=models.Gril.objects.filter(nick=‘egon1‘).first()
 7         # print(obj.nick,obj.id)
 8         # obj.m.add(2)
 9         # obj.m.add(2,4)
10         # obj.m.add(*[1,])
11 
12         # obj.m.remove(1)
13         # obj.m.remove(*[2,4])
14         # obj.m.set([1,])
15 
16         # q=obj.m.all()
17         # print(q)     #<QuerySet [<Boy: Boy object>]>
18         #
19         # boy_list=obj.m.filter(name=‘alex1‘).first()
20         # print(boy_list.name)
21 
22         # obj=models.Gril.objects.filter(nick=‘egon1‘).first()
23         # obj.m.clear()
24         #反向操作
25         # obj=models.Boy.objects.filter(name=‘alex1‘).first()
26         # v=obj.gril_set.all()
27         # print(v)
View Code

3杂交:

技术分享
 1                         class Boy(models.Model):
 2                 name = models.CharField(max_length=32)
 3                 m = models.ManyToManyField(Girl,through="Love",through_fields=(b,g,))
 4                 # 查询和清空
 5 
 6             class Girl(models.Model):
 7                 nick = models.CharField(max_length=32)
 8                 # m = models.ManyToManyField(‘Boy‘)
 9 
10             class Love(models.Model):
11                 b = models.ForeignKey(Boy)
12                 g = models.ForeignKey(Girl)
13 
14                 class Meta:
15                     unique_together = [
16                         (b,g),
17                     ]
View Code

4 自关联   自定义第三张表:

技术分享
 1 class UserInfo(models.Model):
 2     nickname=models.CharField(max_length=64)
 3     username=models.CharField(max_length=64)
 4     password=models.CharField(max_length=64)
 5     gender_choice=(
 6         (1,),
 7         (2,),
 8     )
 9     gender=models.IntegerField(choices=gender_choice)
10 
11 class U2U(models.Model):
12     g=models.ForeignKey(to=UserInfo,to_field=id,related_name=boys)
13     b=models.ForeignKey(to=UserInfo,to_field=id,related_name=grils)
View Code
技术分享
1     xz=models.UserInfo.objects.filter(id=1).first()
2     result=xz.gril.all()
3     for u in result:
4         print(u.g.nickname)
View Code

 

 5 自关联   自动生产第三张表:

技术分享
 1 class UserInfo(models.Model):
 2     nickname=models.CharField(max_length=64)
 3     username=models.CharField(max_length=64)
 4     password=models.CharField(max_length=64)
 5     gender_choice=(
 6         (1,),
 7         (2,),
 8     )
 9     gender=models.IntegerField(choices=gender_choice)
10     m=models.ManyToManyField(UserInfo)
View Code
技术分享
 1     # 查男生
 2     xz = models.UserInfo.objects.filter(id=1).first()
 3     u = xz.m.all()
 4     for row in u:
 5         print(row.nickname)
 6     # 查女神
 7     xz = models.UserInfo.objects.filter(id=4).first()
 8     v = xz.userinfo_set.all()
 9     for row in v:
10         print(row.nickname)
11     return HttpResponse(...)
View Code

 

6 FK 自关联

技术分享
 1 class Comment(models.Model):
 2     """
 3     评论表
 4     """
 5     news_id = models.IntegerField()            # 新闻ID
 6     content = models.CharField(max_length=32)  # 评论内容
 7     user = models.CharField(max_length=32)     # 评论者
 8     reply = models.ForeignKey(Comment,null=True,blank=True,related_name=xxxx)
 9 """
10    新闻ID                         reply_id
11 1   1        别比比    root         null
12 2   1        就比比    root         null
13 3   1        瞎比比    shaowei      null
14 4   2        写的正好  root         null
15 5   1        拉倒吧    由清滨         2
16 6   1        拉倒吧1    xxxxx         2
17 7   1        拉倒吧2    xxxxx         5
18 """
19 """
20 新闻1
21     别比比
22     就比比
23         - 拉倒吧
24             - 拉倒吧2
25         - 拉倒吧1
26     瞎比比
27 新闻2:
28     写的正好
29 """
View Code

 

 admin

django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin 则需要以下步骤:

  • 创建后台管理员
  • 配置url
  • 注册和配置django admin后台管理页面

1、创建后台管理员

1
python manage.py createsuperuser

2、配置后台管理url

1
url(r‘^admin/‘, include(admin.site.urls))

3、注册和配置django admin 后台管理页面

 a、在admin中执行如下配置

技术分享
1 from django.contrib import admin
2   
3 from app01 import  models
4   
5 admin.site.register(models.UserType)
6 admin.site.register(models.UserInfo)
7 admin.site.register(models.UserGroup)
8 admin.site.register(models.Asset)
View Code

 b、设置数据表名称

技术分享
1 class UserType(models.Model):
2     name = models.CharField(max_length=50)
3   
4     class Meta:
5         verbose_name = 用户类型
6         verbose_name_plural = 用户类型
View Code

 c、打开表之后,设定默认显示,需要在model中作如下配置

技术分享
 1 from django.contrib import admin
 2   
 3 from app01 import  models
 4   
 5 class UserInfoAdmin(admin.ModelAdmin):
 6     list_display = (username, password, email)
 7   
 8   
 9 admin.site.register(models.UserType)
10 admin.site.register(models.UserInfo,UserInfoAdmin)
11 admin.site.register(models.UserGroup)
12 admin.site.register(models.Asset)
View Code

 d、为数据表添加搜索功能

技术分享
 1 from django.contrib import admin
 2   
 3 from app01 import  models
 4   
 5 class UserInfoAdmin(admin.ModelAdmin):
 6     list_display = (username, password, email)
 7     search_fields = (username, email)
 8   
 9 admin.site.register(models.UserType)
10 admin.site.register(models.UserInfo,UserInfoAdmin)
11 admin.site.register(models.UserGroup)
12 admin.site.register(models.Asset)
View Code

 e、添加快速过滤

技术分享
 1 from django.contrib import admin
 2   
 3 from app01 import  models
 4   
 5 class UserInfoAdmin(admin.ModelAdmin):
 6     list_display = (username, password, email)
 7     search_fields = (username, email)
 8     list_filter = (username, email)
 9       
10   
11   
12 admin.site.register(models.UserType)
13 admin.site.register(models.UserInfo,UserInfoAdmin)
14 admin.site.register(models.UserGroup)
15 admin.site.register(models.Asset)
View Code

ajax请求

新url的方式:
点击---href跳转页面---对应函数(GET请求)---返回另一个html文件
---增加或编辑---form表单提交数据--函数中数据库更新(POST请求)---重定向

当客户端的添加或编辑按钮不经常使用时,没必要在页面开始加载时就将内容写入模态对话框,只需要在点击时触发一个ajax请求就可以获取数据
服务端接收ajax请求一般要进行try,except捕捉异常

为了防止读取数据库时间过长,用户体验不好,加上‘正在加载’的图片


模态对话框的方式:
点击---触发js事件---显示对话框(对话框中标签的内容可以是刚开始加载时就写好的,也可以是点击之后通过ajax请求得到的)
---增加或编辑---发送ajax请求---对应函数,更新数据库(POST请求)---返回字典---重新加载或报错

 

ajax请求:利用模态对话框处理浏览器请求时,为了防止form表单提交数据时自动刷新页面,采用ajax向后端发送数据
前端不会发生任何变化,数据处理结束后,后端给ajax返回一个字典,ajax根据字典来进行重新加载或报错

技术分享
 1 $.ajax({
 2         url:‘‘, #数据提交的地址
 3         type: get/post,
 4         data: {key1:value,key2:[],k3: JSON.stringify({k1:v1,...}}, #要发送的数据,可以是字符串或列表
 5    dataType: JSON, #相当于json.parse(data) 将json字符串反序列化为jquery对象
 6    traditional:true, #如果ajax提交的数据有列表,则要加上traditional:true,
 7    success:function(data){
 8           if(data.status){
 9      location.reload(‘‘) #重新加载某页面
10 
11                location.href(/index.html?page=)+data.id   #利用ajax进行重定向
12       }else{
13       alert(data.message)} 
14       })
View Code

 

Django框架基础(二)

标签:efi   pat   捕捉异常   rbo   ble   操作   内容   select   mod   

原文地址:http://www.cnblogs.com/liuguniang/p/7105911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!