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()
? ? })
})
轉載于:https://blog.51cto.com/hequan/1911354