django学习笔记第二日

Posted 梦中琴歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django学习笔记第二日相关的知识,希望对你有一定的参考价值。

上节内容回顾:
	1、Django请求生命周期
		-> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串
		-> URL对应关系(匹配) -> 视图函数 -> 打开一个html文件,读取内容
		
	2、创建django projcet

		django-admin startproject mysite
		

		..
		
		mysite
			mysite
				- 配置文件
				- url.py
				- settings.py
			
		cd mysite
		python manage.py startapp cmdb
		
		mysite
			mysite
				- 配置文件
				- url.py
				- settings.py
			cmdb
				- views.py
				- admin.py
				- models.py # 创建数据库表

	3、配置
		
		模板路径
		静态文件路径
		# CSRF
		
	4、编写程序

		a. url.py
			
			/index/    ->   func
			
		b. views.py
			
			def func(request):
				# 包含所有的请求数据
				...
				return HttpResponse(\'字符串\')
				return render(request, \'index.html\', {\'\'})
				retrun redirect(\'URL\')
				
		c. 模板语言
			return render(request, \'index.html\', {\'li\': [11,22,33]})
			
			{% for item in li %}
				<h1>{{item}}</h1>
			{% endfor %}
			
			
			***********  索引用点 **********
			<h2> {{item.0 }} </h2>

一、路由系统,URL
	1、url(r\'^index/\', views.index),    
	   url(r\'^home/\', views.Home.as_view()),
	2、url(r\'^detail-(\\d+).html\', views.detail),  
	3、url(r\'^detail-(?P<nid>\\d+)-(?P<uid>\\d+).html\', views.detail)
	   
	   PS:
			def detail(request, *args,**kwargs):
				pass
	
	   实战:
			a. 
				url(r\'^detail-(\\d+)-(\\d+).html\', views.detail),
				
				def func(request, nid, uid):
					
					pass
			
				def func(request, *args):
					args = (2,9)
					
					
				def func(request, *args, **kwargs):
					args = (2,9)
	   
			b. 
				url(r\'^detail-(?P<nid>\\d+)-(?P<uid>\\d+).html\', views.detail)
				
				def func(request, nid, uid):
					pass
					
				def funct(request, **kwargs):
					kwargs = {\'nid\': 1, \'uid\': 3}
					
				def func(request, *args, **kwargs):
					args = (2,9)
	4、 name
		
		对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****
		
		url(r\'^asdfasdfasdf/\', views.index, name=\'i1\'),
		url(r\'^yug/(\\d+)/(\\d+)/\', views.index, name=\'i2\'),
		url(r\'^buy/(?P<pid>\\d+)/(?P<nid>\\d+)/\', views.index, name=\'i3\'),
		
		
		#反转生成url
		def func(request, *args, **kwargs):
			from django.urls import reverse
			
			url1 = reverse(\'i1\')                              # asdfasdfasdf/
			url2 = reverse(\'i2\', args=(1,2,))                 # yug/1/2/
			url3 = reverse(\'i3\', kwargs={\'pid\': 1, "nid": 9}) # buy/1/9/
		
		
		xxx.html
			
			{% url "i1" %}               # asdfasdfasdf/
			{% url "i2" 1 2 %}           # yug/1/2/
			{% url "i3" pid=1 nid=9 %}   # buy/1/9/
		
		注:
			# 当前的URL
			request.path_info 
	5、多级路由
		
		project/urls.py
			from django.conf.urls import url,include
			from django.contrib import admin

			urlpatterns = [
				url(r\'^cmdb/\', include("app01.urls")),
				url(r\'^monitor/\', include("app02.urls")),
			]
			
		app01/urls.py
			from django.conf.urls import url,include
			from django.contrib import admin
			from app01 import views

			urlpatterns = [
				url(r\'^login/\', views.login),
			]
			
		app02/urls.py
			from django.conf.urls import url,include
			from django.contrib import admin
			from app02 import views

			urlpatterns = [
				url(r\'^login/\', views.login),
			]
	
	6、默认值(欠)
	
	7、命名空间(欠)
	
	
二、视图
	1、获取用户请求数据
		request.GET
		request.POST
		request.FILES
		PS:
			GET:获取数据				
			POST:提交数据
			
	2、checkbox等多选的内容
		request.POST.getlist()
	3、上传文件
		# 上传文件,form标签做特殊设置
		obj = request.FILES.get(\'fafafa\')
		obj.name
		f = open(obj.name, mode=\'wb\')
		for item in obj.chunks():
			f.write(item)
		f.close()
	
	4、FBV & CBV
	   function base view
	   
		url.py
			index -> 函数名
			
		view.py
			def 函数(request):
				...
		====》
		/index/ -> 函数名
			
		/index/ -> 类
		
		====》
		
		建议:两者都用
		
	5、装饰器
		欠

	
三、模板
	
	

四、ORM操作
	select * from tb where id > 1
	# 对应关系
	models.tb.objects.filter(id__gt=1)
	models.tb.objects.filter(id=1)
	models.tb.objects.filter(id__lt=1)
	
	创建类
	
	a. 先写类
		from django.db import models

		# app01_userinfo
		class UserInfo(models.Model):
			# id列,自增,主键
			# 用户名列,字符串类型,指定长度
			username = models.CharField(max_length=32)
			password = models.CharField(max_length=64)
		
	b. 在views里面导入模块部上效,所以要注册APP

		INSTALLED_APPS = [
			\'django.contrib.admin\',
			\'django.contrib.auth\',
			\'django.contrib.contenttypes\',
			\'django.contrib.sessions\',
			\'django.contrib.messages\',
			\'django.contrib.staticfiles\',
			\'app01\',
		]
	然后在app的models写完数据类之后需要运行如下命令,创建表
	c. 执行命令
		python manage.py  makemigrations
		python manage.py  migrate
		
	d. ********** 注意 ***********
		Django默认使用mysqldb模块链接MySQL
		主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
			import pymysql
			pymysql.install_as_MySQLdb()
	
	1. 根据类自动创建数据库表
		# app下的models.py
	
		python manage.py  makemigrations
		python manage.py  migrate
		
		
		字段:
			字符串类型
			
			
			数字
			
			
			时间
			
			
			二进制
			
			自增models.AutoField(primary_key=True)
			
		字段的参数:
			null               -> db是否可以为空
			default            -> 默认值
			primary_key        -> 主键
			db_column          -> 列名
			db_index           -> 索引
			unique			   -> 唯一索引
			unique_for_date    -> 
			unique_for_month
			unique_for_year
			auto_now           -> 创建时,自动生成时间
			auto_now_add       -> 更新时,自动更新为当前时间
			
				# obj = UserGroup.objects.filter(id=1).update(caption=\'CEO\')
				# obj = UserGroup.objects.filter(id=1).first()
				# obj.caption = "CEO"
				# obj.save()
				
			choices			  -> django admin中显示下拉框,避免连表查询
			     user_choices = (
				 (1,超级用户),
				 (2,普通用户),
				 (3,低级用户),
				 )
			    user_type_id = models.IntegerField(choices = user_choices,default= 1)
			blank             -> django admin是否可以为空
			verbose_name      -> django admin显示字段中文
			editable          -> django admin是否可以被编辑
			error_messages    -> 错误信息欠
			help_text         -> django admin提示
			validators		  -> django form ,自定义错误信息(欠)
			
			
			创建 Django 超级用户:python manage.py createsuperuser
			
			
			
			
	2. 根据类对数据库表中的数据进行各种操作
增
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 
# A 18 3
# B 18 2
# C 18 2

	
		一对多:
		
			a. 外检
			b. 
				外键字段_id
			c.
				models.tb.object.create(name=\'root\', user_group_id=1)
				
			d. 
				
				userlist = models.tb.object.all()
				for row in userlist:
					row.id
					row.user_group_id
					row.user_group.caption
					
					
	=================== 作业:用户管理 ====================
	1、用户组的增删改查
	2、用户增删该查
		- 添加必须是对话框
		- 删除必须是对话框
		- 修改,必须显示默认值
		
	3、比较好看的页面
	
	4、预习:
		http://www.cnblogs.com/wupeiqi/articles/5246483.html
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
  

  

以上是关于django学习笔记第二日的主要内容,如果未能解决你的问题,请参考以下文章

第二日记

python第二日随堂练习题

学习笔记:python3,代码片段(2017)

Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅

实训日志(第二日)

PHP第二日所学内容