Django框架基础(二)

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         )

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)

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)

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                     ]

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‘)

1     xz=models.UserInfo.objects.filter(id=1).first()
2     result=xz.gril.all()
3     for u in result:
4         print(u.g.nickname)

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‘)

 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(‘...‘)

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 """

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)

b、设置数据表名称

1 class UserType(models.Model):
2     name = models.CharField(max_length=50)
3
4     class Meta:
5         verbose_name = ‘用户类型‘
6         verbose_name_plural = ‘用户类型‘

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)

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)

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)

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       })

时间: 2024-07-29 19:42:08

Django框架基础(二)的相关文章

Django框架(二)---- 常用命令

Django框架(二) 常用命令: 文章中,命令中带有 manage.py 字样的,代表需要进入project/manage.py文件同一级的目录下 1.创建项目: django-admin startproject project-name django-admin:在Windows中,若报错,可用django-admin.py代替 project-name:项目名称,需要符合Python的包命名规范 项目结构:manage.py文件是后续命令操作的关键 2.创建App: python man

Django框架基础(一)

Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 1 安装 1 pip3 install django 2 # 创建Django程序 3 django-admin startproject mysite 4 # 进入程序目录 5 cd mysite 6 # 启动socket服务端,等待用户发送请求 7 python manage.py runse

Django框架基础

Django基础-Lesson1 web框架概念 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统. 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端.  socket模拟服务端 最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回. 如果要动态生成HTML,就需要把上述步骤自己来实现.不过,接受HTTP

Django框架基础之Form组件

服务端假设所有用户提交的数据都是不可信任的,所以Django框架内置了form组件来验证用户提交的信息 form组件的2大功能:       1 验证(显示错误信息)       2 保留用户上次输入的信息                  -- 可以生成html标签应用: class A_Form(Form): 字段=fields.字段类型(默认参数: required=True, widget=widgets.插件(attrs={})) 常用字段:Charfield,RegexField,I

django框架基础-django redis-长期维护-20191220

###############   django框架-django redis    ############### ###############   django框架-django redis    ############### ###############   django框架-django redis    ############### ###############   django框架-django redis    ############### ##############

django框架基础-django的中间件-长期维护-20200113

##################    中间件      ####################### ##################    中间件      ####################### ##################    中间件      ####################### ##################    中间件      ####################### ##################    中间件     

Django框架基础学习

Django安装 python下载地址 http://www.python.org/download/releases/3.3.4/ Django的下载地址:https://www.djangoproject.com/download/ 1)安装(进到解压目录) python setup.py install 2.配置环境变量(PATH) C:/Python27/Lib/site-packages/django;C:/Python27/Scripts; 3.检查是否安装成功,可以在dos下进入D

Django框架基础之ajax

对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要重新加载全局数据 2.AJAX AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步的JavaScript:使用 [JavaScript语言] 以及 相关[浏览器提供类库] 的功能向服务端发送请求

Django框架(二十七)—— ContentType组件

目录 ContentType组件 一.什么是ContentType组件 二.使用ContentType 三.使用场景总结 ContentType组件 一.什么是ContentType组件 contentType是Django内置的组件,可以方便我们快速的连表查询. 可以追踪项目中所有app和model的对应关系,并记录在ContentType表中 models.py文件的表结构写好后,通过makemigrations和migrate两条命令迁移数据后,在数据库中会自动生成一个django_con