1、Django請求的生命周期

? 武彥濤:

? ? ? 路由系統 -> 試圖函數(獲取模板+數據=》渲染) -> 字符串返回給用戶

2、路由系統

? 王騰:

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

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

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

? ? ? /detail/? ? ? ? ? ? ->? include("app01.urls")

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

? ? ? ? ? ? ? ? ? ? ? ? - 視圖中:reverse

? ? ? ? ? ? ? ? ? ? ? ? - 模板中:{% url "a1" %}

3、視圖

? 陳一波:

? FBV:函數

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

? ? ? ? ..

? CBV:類

? ? ? class Home(views.View):

? ? ? ? def get(self,reqeust,*args,**kwargs):

? ? ? ? ? ? ..

? 獲取用戶請求中的數據:

? ? ? request.POST.get

? ? ? request.GET.get

? ? ? reqeust.FILES.get()

? ? ? # checkbox,

? ? ? ........getlist()

? ? ? request.path_info

? ? ? 文件對象 = reqeust.FILES.get()

? ? ? 文件對象.name

? ? ? 文件對象.size

? ? ? 文件對象.chunks()

? ? ? # <form 特殊的設置></form>

? 給用戶返回數據:

? ? ? render(request, "模板的文件的路徑", {'k1': [1,2,3,4],"k2": {'name': '張揚','age': 73}})

? ? ? redirect("URL")

? ? ? HttpResponse(字符串)

4、模板語言

? 馮國富:

? 腎陽

? 程表

? 高曉峰

? ? ? render(request, "模板的文件的路徑", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': '張揚','age': 73}})

? <html>

? <body>

? ? ? <h1> ` obj ` </h1>

? ? ? <h1> ` k1`.`3 ` </h1>

? ? ? <h1> ` k2`.`name ` </h1>

? ? ? {% for i in k1 %}

? ? ? ? <p> ` i ` </p>

? ? ? {% endfor %}

? ? ? {% for row in k2.keys %}

? ? ? ? ` row `

? ? ? {% endfor %}

? ? ? {% for row in k2.values %}

? ? ? ? ` row `

? ? ? {% endfor %}

? ? ? {% for k,v in k2.items %}

? ? ? ? ` k ` - `v`

? ? ? {% endfor %}

? </body>

? </html>

5、ORM

? 吳世鵬

? 閆利鵬

? a. 創建類和字段

? ? ? class User(models.Model):

? ? ? ? age = models.IntergerFiled()

? ? ? ? name = models.CharField(max_length=10)#字符長度

? ? ? Python manage.py makemigrations

? ? ? python manage.py migrate

? ? ? # settings.py 注冊APP

? b. 操作

? ? ? 王賽鵬

? ? ? 增

? ? ? ? models.User.objects.create(name='qianxiaohu',age=18)

? ? ? ? dic = {'name': 'xx', 'age': 19}

? ? ? ? models.User.objects.create(**dic)

? ? ? ? obj = models.User(name='qianxiaohu',age=18)

? ? ? ? obj.save()

? ? ? 刪

? ? ? ? models.User.objects.filter(id=1).delete()

? ? ? 改

? ? ? ? models.User.objects.filter(id__gt=1).update(name='alex',age=84)

? ? ? ? dic = {'name': 'xx', 'age': 19}

? ? ? ? models.User.objects.filter(id__gt=1).update(**dic)

? ? ? 查

? ? ? ? models.User.objects.filter(id=1,name='root')

? ? ? ? models.User.objects.filter(id__gt=1,name='root')

? ? ? ? models.User.objects.filter(id__lt=1)

? ? ? ? models.User.objects.filter(id__gte=1)

? ? ? ? models.User.objects.filter(id__lte=1)

? ? ? ? models.User.objects.filter(id=1,name='root')

? ? ? ? dic = {'name': 'xx', 'age__gt': 19}

? ? ? ? models.User.objects.filter(**dic)

? ? ? ? v1 = models.Business.objects.all()

? ? ? ? # QuerySet ,內部元素都是對象


? ? ? ? # QuerySet ,內部元素都是字典

? ? ? ? v2 = models.Business.objects.all().values('id','caption')

? ? ? ? # QuerySet ,內部元素都是元組

? ? ? ? v3 = models.Business.objects.all().values_list('id','caption')



? ? ? ? # 獲取到的一個對象,如果不存在就報錯

? ? ? ? models.Business.objects.get(id=1)

? ? ? ? 對象或者None = models.Business.objects.filter(id=1).first()

? ? ? ? 外鍵:

? ? ? ? ? ? v = models.Host.objects.filter(nid__gt=0)

? ? ? ? ? ? v[0].b.caption? ---->? 通過.進行跨表

自動序號

{{ forloop.counter}} ?.counter0


? ? ? 外鍵:

? ? ? ? class UserType(models.Model):

? ? ? ? ? ? caption = models.CharField(max_length=32)

? ? ? ? ? ? id? caption

? ? ? ? # 1,普通用戶

? ? ? ? # 2,VIP用戶

? ? ? ? # 3, 游客

? ? ? ? class User(models.Model):

? ? ? ? ? ? age = models.IntergerFiled()

? ? ? ? ? ? name = models.CharField(max_length=10)#字符長度

? ? ? ? ? ? # user_type_id = models.IntergerFiled() # 約束,

? ? ? ? ? ? user_type = models.ForeignKey("UserType",to_field='id') # 約束,

? ? ? ? ? name age? user_type_id

? ? ? ? # 張揚? 18? ? 3

? ? ? ? # 張A揚 18? ? 2

? ? ? ? # 張B揚 18? ? 2

張揚:

? position:fixed absolute relative

? Ajax

<A id="ajax_submit" >提交</a>

? ? ?

? ? $('#ajax_submit').clink(function(){

? ? ? $.ajax({

? ? ? ? url: '/host',

? ? ? ? type: "POST",

? ? ? ? data: {'k1': 123,'k2': "root"}, ?## ? 'hostname':$('host').val(),

? ? ? ? success: function(data){

? ? ? ? ? ? // data是服務器端返回的字符串 data = {'status':false,'data':null,"error":}

? ? ? ? ? ? var obj = JSON.parse(data);

? ? ? ? ? ? ? ? ? ? if(obj.status){

? ? ? ? ? ? ? ? ? ? ? ?location.reload();

? ? ? ? ? ? ? ? ? ? ?? }else{ ?$('error_msg').text(obj.error); ??

? ? ? ? ? ? ? ? ? ? ?????}

? ? ??????

? ? ? ? }

? ? ? })

?????}?????

def test_ajax(request):

? ? ret = {'status': True, 'error': None, 'data': None}

? ? try:

? ? ? ? h = request.POST.get('hostname')

? ? ? ? i = request.POST.get('ip')

? ? ? ? p = request.POST.get('port')

? ? ? ? b = request.POST.get('b_id')

? ? ? ? if h and len(h) > 5:

? ? ? ? ? ? models.Host.objects.create(hostname=h,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ip=i,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? port=p,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? b_id=b)

? ? ? ? else:

? ? ? ? ? ? ret['status'] = False

? ? ? ? ? ? ret['error'] = "太短了"

? ? except Exception as e:

? ? ? ? ret['status'] = False

? ? ? ? ret['error'] = '請求錯誤'

? ? return HttpResponse(json.dumps(ret))

? ? ? 建議:永遠讓服務器端返回一個字典

? ? ? return HttpResponse(json.dumps(字典))

多對多:

? ? 創建多對多:

? ? ? 方式一:自定義關系表

? ? ? ? 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()

? ? ? ? ? ? b = models.ForeignKey(to="Business", to_field='id')

? ? ? ? # 10

? ? ? ? class Application(models.Model):

? ? ? ? ? ? name = models.CharField(max_length=32)

? ? ? ? # 2

? ? ? ? class HostToApp(models.Model):

? ? ? ? ? ? hobj = models.ForeignKey(to='Host',to_field='nid')

? ? ? ? ? ? aobj = models.ForeignKey(to='Application',to_field='id')

? ? ? ? # HostToApp.objects.create(hobj_id=1,aobj_id=2)

? ? ? 方式二:自動創建關系表

? ? ? ? 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()

? ? ? ? ? ? b = models.ForeignKey(to="Business", to_field='id')

? ? ? ? # 10

? ? ? ? class Application(models.Model):

? ? ? ? ? ? name = models.CharField(max_length=32)

? ? ? ? ? ? r = models.ManyToManyField("Host")

? ? ? ? 無法直接對第三張表進行操作

? ? ? ? obj = Application.objects.get(id=1)

? ? ? ? obj.name

? ? ? ? # 第三張表操作

? ? ? ? obj.r.add(1) ? ? ? ? ? ? ? ? ? ? ? 1 ?=== ?1

? ? ? ? obj.r.add(2)

? ? ? ? obj.r.add(2,3,4)

? ? ? ? obj.r.add(*[1,2,3,4])

? ? ? ? obj.r.remove(1)

? ? ? ? obj.r.remove(2,4)

? ? ? ? obj.r.remove(*[1,2,3])

? ? ? ? obj.r.clear()

? ? ? ? obj.r.set([3,5,7])

? ? ? ? # 所有相關的主機對象“列表” QuerySet

? ? ? ? obj.r.all()

一對一查詢?

v1 = models.Business.objects.all()# QuerySet ,內部元素都是對象? ? ?

v2 = models.Business.objects.all().values('id','caption')?# QuerySet ,內部元素都是字典? ? ? ??

v3 = models.Business.objects.all().values_list('id','caption')# QuerySet ,內部元素都是元組

一對多查詢 ?跨表

v1 = models.TestInfo.objects.filter(nid__gt=0)# QuerySet ,內部元素都是對象

v2 = models.TestInfo.objects.filter(nid__gt=0).values('id','test_group_nid','test_group__jifang')?# QuerySet ,內部元素都是字典

v2 = models.TestInfo.objects.filter(nid__gt=0).values_list('id','test_group_nid','test_group__jifang')?# QuerySet ,內部元素都是字典

$(function(){

? ? $('#add_host').click(function(){

? ? ? ? $('.shade,.add-modal').removeClass('hide');

? ? });

? ? $('#cancel').click(function(){

? ? ? ? $('.shade,.add-modal').addClass('hide');

? ? });

? ? $('#ajax_submit').click(function(){

? ? ? ? $.ajax({

? ? ? ? ? ? url: "/test_ajax",

? ? ? ? ? ? type: 'POST',

? ? ? ? ? ? //data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},

? ? ? ? ? ? data: $('#add_form').serialize(),

? ? ? ? ? ? success: function(data){

? ? ? ? ? ? ? ? var obj = JSON.parse(data);

? ? ? ? ? ? ? ? if(obj.status){

? ? ? ? ? ? ? ? ? ? location.reload();

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? $('#erro_msg').text(obj.error);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? })

? ? });

? ? $('.edit').click(function(){

? ? ? ? $('.shade,.edit-modal').removeClass('hide');

? ? ? ? var bid = $(this).parent().parent().attr('bid');

? ? ? ? var nid = $(this).parent().parent().attr('hid');

? ? ? ? $('#edit_form').find('select').val(bid);

? ? ? ? $('#edit_form').find('input[name="nid"]').val(nid);

? ? ? ? // 修改

? ? ? ? /*

? ? ? ? $.ajax({

? ? ? ? ? ? data: $('#edit_form').serialize()

? ? ? ? });

? ? ? ? */

? ? ? ? // models.Host.objects.filter(nid=nid).update()

? ? })

})