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‘: ‘xxx‘,‘age‘: 73}}) redirect("URL") HttpResponse(字符串) 4、模板语言 render(request, "模板的文件的路径", {‘obj‘: 1234, ‘k1‘: [1,2,3,4],"k2": {‘name‘: ‘ssss‘,‘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 %} #keys 通过字典键 取值 {{ row }} {{forloop.counter}}#从1开始计数 {{forloop.counter0}}#从0开始计数 {{forloop.revcounter }}#从1开始计数倒降序 {{forloop.revcounter0 }}#从0开始计数倒降序 {{forloop.first}}#是否第一个循环 {{forloop.last}}#是否最后一个循环 {{forloop.parentloop}}#父级的循环计数 {% 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 ----> 通过.进行跨表 filter(b__caption)# 条件查询跨表时用 __ 双下划线 外键: 示例:
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 # 用户1 18 3 #表示用户1 为游客 # 用户2 18 2 #表示用户2 为VIP用户 # 用户3 18 2
窗口相对定位 开启相对定位 使用父级相对定位 单用 开始显示绝对定位 position: fixed relative absolute Ajax $.ajax({ url: ‘/host‘, type: "POST", data: {‘k1‘: 123,‘k2‘: "root"}, success: function(data){ // data是服务器端返回的字符串 var obj = JSON.parse(data); } }) $.get(url=‘xx‘,data=‘xxx‘) $.getJson $.post 建议:永远让服务器端返回一个字典 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)#这个记录对应的关系 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() #获取当前对象 的所有对应关系
时间: 2024-10-11 09:19:19