重点总结记录
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  ---->  通过.进行跨表
		
		外键:
			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     
			# aa  18     3
			# bb 18     2
			# cc 18     2
	position:fixed absolute relative
	
	Ajax
	
		$.ajax({
			url: ‘/host‘,
			type: "POST",
			data: {‘k1‘: 123,‘k2‘: "root"},
			success: function(data){
				// data是服务器端返回的字符串
				var obj = JSON.parse(data);
			}
		})
		
	
		建议:永远让服务器端返回一个字典
		
		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()
原文:http://www.cnblogs.com/liuyansheng/p/6212918.html