网站设计建网站,网站制作软件手机版,教育机构域名,h5调用小程序api1、Django请求的生命周期武彦涛#xff1a;路由系统 - 试图函数(获取模板数据》渲染) - 字符串返回给用户2、路由系统王腾#xff1a;/index/ - 函数或类.as_view()/detail/(\d) - 函数(参数) 或 类.as_view()#xff08;参数 路由系统 - 试图函数(获取模板数据》渲染) - 字符串返回给用户2、路由系统 王腾 /index/ - 函数或类.as_view() /detail/(\d) - 函数(参数) 或 类.as_view()参数 /detail/(?Pnid\d) - 函数(参数) 或 类.as_view()参数 /detail/ - include(app01.urls) /detail/ namea1 - 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 /html5、ORM 吴世鹏 闫利鹏 a. 创建类和字段 class User(models.Model): age models.IntergerFiled() name models.CharField(max_length10)#字符长度 Python manage.py makemigrations python manage.py migrate # settings.py 注册APP b. 操作 王赛鹏 增 models.User.objects.create(nameqianxiaohu,age18) dic {name: xx, age: 19} models.User.objects.create(**dic) obj models.User(nameqianxiaohu,age18) obj.save() 删 models.User.objects.filter(id1).delete() 改 models.User.objects.filter(id__gt1).update(namealex,age84) dic {name: xx, age: 19} models.User.objects.filter(id__gt1).update(**dic) 查 models.User.objects.filter(id1,nameroot) models.User.objects.filter(id__gt1,nameroot) models.User.objects.filter(id__lt1) models.User.objects.filter(id__gte1) models.User.objects.filter(id__lte1) models.User.objects.filter(id1,nameroot) 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(id1) 对象或者None models.Business.objects.filter(id1).first() 外键 v models.Host.objects.filter(nid__gt0) v[0].b.caption ---- 通过.进行跨表自动序号{{ forloop.counter}} .counter0 外键 class UserType(models.Model): caption models.CharField(max_length32) id caption # 1普通用户 # 2VIP用户 # 3 游客 class User(models.Model): age models.IntergerFiled() name models.CharField(max_length10)#字符长度 # user_type_id models.IntergerFiled() # 约束 user_type models.ForeignKey(UserType,to_fieldid) # 约束 name age user_type_id # 张扬 18 3 # 张A扬 18 2 # 张B扬 18 2张扬 position:fixed absolute relative AjaxA idajax_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(hostnameh, ipi, portp, b_idb) 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_keyTrue) hostname models.CharField(max_length32,db_indexTrue) ip models.GenericIPAddressField(protocolipv4,db_indexTrue) port models.IntegerField() b models.ForeignKey(toBusiness, to_fieldid) # 10 class Application(models.Model): name models.CharField(max_length32) # 2 class HostToApp(models.Model): hobj models.ForeignKey(toHost,to_fieldnid) aobj models.ForeignKey(toApplication,to_fieldid) # HostToApp.objects.create(hobj_id1,aobj_id2) 方式二自动创建关系表 class Host(models.Model): nid models.AutoField(primary_keyTrue) hostname models.CharField(max_length32,db_indexTrue) ip models.GenericIPAddressField(protocolipv4,db_indexTrue) port models.IntegerField() b models.ForeignKey(toBusiness, to_fieldid) # 10 class Application(models.Model): name models.CharField(max_length32) r models.ManyToManyField(Host) 无法直接对第三张表进行操作 obj Application.objects.get(id1) 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__gt0)# QuerySet ,内部元素都是对象v2 models.TestInfo.objects.filter(nid__gt0).values(id,test_group_nid,test_group__jifang) # QuerySet ,内部元素都是字典v2 models.TestInfo.objects.filter(nid__gt0).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[namenid]).val(nid); // 修改 /* $.ajax({ data: $(#edit_form).serialize() }); */ // models.Host.objects.filter(nidnid).update() })}) 转载于:https://blog.51cto.com/hequan/1911354