django基礎篇03-階段總結

1.django的生命週期:

  url -> 路由系統 -> 視圖函數(獲取模版 + 數據 =>渲染) -> 返回字符串html

2.路由系統:

    /index/          ->函數或類.as_view()

  /detail/(\d)        ->函數(參數)或 類.as_view()(參數)

  /detail/(?P<nid>\d+)     ->函數(參數)或 類.as_view()(參數)

  /detail/           -> include('app01.urls')

  /detail/  name='a1'     -> include('app01.urls')

視圖views.pypython

from django.shortcuts imoport reverse

# 獲取原路徑
reverse('a1')

模版jquery

{%   url 'a1'   %}

3. 視圖

FBV:函數  path(r'index',views.index)ajax

  def index(request,*args,**kwargs):django

    passjson

CBV:類        path(r'index',views.Index.as_view())數組

  class Index(views.view):app

    pass函數

獲取用戶的數據:url

   request.GET.get(xxx)

  request.POST.get(xxx)

  reqest.FILES.get(xxxx)

  obj = request.FILES.get('xxx')

  f = open('simple01.txt','wb')

  for chunk in obj.chunks():

    f.write(chunk)

  f.close()

  # checkbox的值的獲取

  request.GET.getlist('xxx'

給用戶返回數據的形式:

render(request,'xxx.html',{arg0:1234,arg1:[1,2,3,4]})
HtppResponse(字符串)
redirect('URL')

4.模版語言

render(request, "模板的文件的路徑", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': '張揚','age': 73}})
<html> <body> <h1>{{ obj }}</h1> <h1>{{ k1.1 }}</h1> <h1>{{ k2.name }}</h1> {% for v in k2.values %} <h1>{{ v }}</h1> {% endfor %} </body> </html>

5.ORM

a. 建立類和字段

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntgerField()

終端執行:

python3 manage.py makemerigations
python3 manage.py merigate

注意:setting.py文件中,是否INSTALL_APPS是否註冊app?

b. 操做

增 如下兩種方式均可以

models.UserInfo.objects.create(name='xm01',age=23)

obj = models.UserInfo(name='xm02',age=34)
obj.save()

models.UserInfo.objects.filter(name='xm01').delete()

models.UserInfo.objects.filter('xm02').update(name='xm01')
user_info = {'name':'xm03','age':34}
models.UserInfo.object.filter(id__gt=0).update(**user_info)

# 查詢所有 返回QuerySet對象
models.UserInfo.objects.all()
# 條件查詢
models.UserInfo.objects.filter(name='xm01')
# and的使用
models.UserInfo.objects.filter(name='xm01',age=23)
# 查詢某些字段
models.UserInfo.objects.all().values('name')


# 獲取一個對象,若是不存在則報錯
models.UserInfo.objects.get(id=1)
或者 若是存在則返回對象,不然返回None
obj = models.UserInfo.objects.filter(id=1).first()

外鍵

# caption 1:普通用戶  2:VIP用戶   3:遊客
class UserType(models.Model):
    caption = models.CharFileld(max_length=32)

class User(models.Model):
    age = models.IntegerField()
    name = models.CharField(max_length=64)
    # 約束
    user_type = models.ForeignKey(to='UserType' to_field='id')   

6.Ajax

基本使用

<script src="../static/jquery-1.12.4.js"></script>
<script>
        $.ajax({
            url:'/orm.html',
            data: {'account': 'xm02','pwd':'12345678'},
            dataType: 'json',
            traditional: true,
            success: function (data) {
                
            }
        })
</script>

dataType:返回的參數格式爲json數據類型

traditoinal: 參數中包含數組的時候,將此參數設置爲true,這樣數據纔會被傳遞,當遇到參數爲字典的時候,須要經過JSON.stringify(dict)

7.一對多

外鍵

from django.db import models

class UserGroup(models.Model):
    name = models.CharField(max_length=32)


class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)
    gender = models.CharField(max_length=4)
    group_type = models.ForeignKey(UserGroup,to_field='id',on_delete=models.CASCADE)

用法:

# 建立數據
# models.UserGroup.objects.create(name='python')
# models.UserGroup.objects.create(name='Ruby')
# obj = models.UserGroup(name='Object-C')
# obj.save()

models.UserInfo.objects.create(username='xm01',gender='0',pwd='123456',group_type_id=1)

for row in models.UserInfo.objects.all():
    print(row.username,row.pwd,row.gender,row.group_type,sep='\t')
    print(row.group_type.name)

obj = models.UserInfo.objects.filter(group_type_id=1)
print(obj)

obj = models.UserInfo.objects.filter(id__gt=1).values('username','gender','group_type__name')
print(obj)
for row in obj:
print(row['username'],row['gender'],row['group_type__name'],sep='\t')
 
 
# 輸出 
#
xm01 123456 0 UserGroup object (1)
#
python
#
<QuerySet [<UserInfo: UserInfo object (1)>]>
# <QuerySet [{'username': 'xm02', 'gender': '1', 'group_type__name': 'Ruby'}, {'username': 'xm03', 'gender': '0', 'group_type__name': 'Object-C'}]
# xm02    1    Ruby
# xm03    0    Object-C

UserInfo中的group_type爲UserGroup類型的對象,並且外鍵關聯,默認生成 xxx_id字段做爲新關聯其餘模型的字段,若是獲取外表的字段,須要經過xxx__op能夠獲取外表的op字段值

8.多對多

a.自定義關係表

from django.db import models

class Host(models.Model):
    nid = models.AutoField(primary_key=True)
    hostname = models.CharField(max_length=32, db_index=True)
    ip = models.GenericIPAddressField(protocol="ipv4", db_index=True)
    port = models.IntegerField()

class Application(models.Model):
    name = models.CharField(max_length=32)
    h = models.ManyToManyField(Host)

此時django會自動生成第三張表,表名和表結構以下:

調用方法以下

# obj = Application.objects.filter(id=1).first()
# obj.h.add(1)
# obj.h.add(2,3)
# obj.h.add(*[1,2,3])

# obj.h.remove(1)
# obj.h.clear()

# obj.h.set([2])

# 返回Host類型的QuerySet對象
qset = obj.h.all()
for row in qset:
   print(row.hostname,row.ip,row.port,sep='\t')
相關文章
相關標籤/搜索