url -> 路由系統 -> 視圖函數(獲取模版 + 數據 =>渲染) -> 返回字符串html
/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' %}
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')
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>
class UserInfo(models.Model): name = models.CharField(max_length=32) age = models.IntgerField()
終端執行:
python3 manage.py makemerigations
python3 manage.py merigate
增 如下兩種方式均可以
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')
基本使用
<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)
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字段值
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')