每日分享
When I let go of what I am, I become what I might be.
以其终不自为大,故能成其大。
小闫语录:
这是『道德经』中道经的第三十四章中的一句话。意指不妄自称大,才能成就其伟大。不自侍娇资,以谦卑之心处之,方能成就所想成就之事。
python技术面试题(三)
python笔试题
1.Django创建项目的命令?
django-admin startproject 项目名称
2.Django创建项目以后,项目文件夹下的组成部分(对mvt的理解)?
manage.py
:是项目运行的入口,指定配置文件路径。
__init__.py
:是一个空文件,作用是这个目录可以被当做包使用,也可以在这个文件中做一些初始化的操作。
settings.py
:是项目的整体配置文件。
urls.py
:是项目的URL配置文件。
wsgi.py
:是项目与WSGI兼容的web服务器。
与项目同名的目录
:包含项目的配置文件、子应用之类的。
3.对MVC,MVT的理解?
答:下面先来谈一下MVC:
M:Model,模型,和数据库进行交互。
V:View,视图,负责产生HTML页面。
C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答。
我们可以以用户注册的一个案例来说明一下三者之间的关系,结合图片进行说明:
1.用户输入完注册信息之后,点击按钮,将信息提交给网站的服务器。
2.Controller控制器接收用户的注册信息,Controller会告诉Model层将用户的注册信息保存到数据库中。
3.Model层接收到指令之后,将用户的注册信息保存进数据库。
4.数据库返回保存的结果给Model模型。
5.Model层再将保存的结果的返回给Controller控制器。
6.Controller控制器收到保存的结果之后,告诉VIew视图,View视图产生一个html页面。
7.View将产生的html页面的内容交给Controller控制器。
8.Controller控制器将html页面内容返回给浏览器。
9.浏览器接收到服务器Controller返回的html页面之后进行解析展示。
下面再谈一下MVT模型:
M:Model,模型,和MVC中的M功能相同,和数据库进行交互。
V:View,视图,和MVC中的C功能相同,接收请求,进行处理,与M和T进行交互,返回应答。
T:Template,模板,和MVC中的V功能相同,产生html页面。
我们还是以同样的一个注册案例来对MVT模型进行一个简单的说明:
1.用户点击注册按钮,将要注册的内容发送给网站的服务器。
2.View视图,接收到用户发来的注册数据,View告诉Model将用户的注册信息保存进数据库。
3.Model层将用户的注册信息保存到数据库中。
4.数据库将保存的结果返回给Model。
5.Model将保存的结果再返回给View视图。
6.View视图告诉Template模板去产生一个html页面。
7.Template生成html内容返回给View视图。
8.View视图将html页面内容返回给浏览器。
9.浏览器拿到view返回的html页面内容进行解析,展示。
4.Django中models利用ORM对MySQL进行查表的语句(多个语句)?
1.增加:
# 1.save people = EthanYan(name='小闫同学',age=18) people.save() # 2.create EthanYan.objects.create(name='小闫同学',age=18)
2.基本查询:
# get,查询单一结果,如果不存在抛出`模型类.DoesNotExist异常 EthanYan.objects.get(id=3) # all,查询多个结果 EthanYan.objects.all() # count,查询结果数量 EthanYan.objects.count()
3.过滤查询:
# filter,过滤出多个结果 # exclude,排除掉符合条件剩下的结果 # get,过滤单一的结果 # 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线 属性名称__比较运算符=值 # exact:表示判断 EthanYan.objects.filter(id__exact=1) # contains:是否包含 EthanYan.objects.filter(name__contains='闫') # startswith/endswith:以指定值开头或者结尾 EthanYan.objects.filter(name__startswith='小') EtahnYan.objects.filter(name__endswith='记') # isnull:是否为NULL EthanYan.objects.filter(name__isnull=False) # in:是否包含在范围内 EthanYan.objects.filter(id__in=[1,3,5]) # gt:大于 # gte:大于等于 # lt:小于 # lte:小于等于 EthanYan.objects.filter(id__gt=3) # 不等于的运算符,使用exclude()过滤器 EthanYan.objects.exclude(id=3) # 日期查询 # year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。 XiaoYanBiJi.objects.filter(bpub_date__year=1980) XiaoYanBiJi.objects.filter(bpub_date__gt=date(1980,1,1)) # F对象:用于类属性之间的比较条件 from django.db.models import F # 查询小闫笔记中阅读量大于等于评论量的文章。 XiaoYanBiJi.objects.filter(bread__gte=F('bcomment')) # Q对象:用于查询时的逻辑条件 # Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。 # Q(属性名__运算符=值) from django.db.models import Q # 查询阅读量大于20,或编号小于3的文章,只能使用Q对象实现 XiaoYanBiJi.objects.filter(Q(bread_gt=20)|Q(id__lt=3)) # 查询编号不等于3的文章 XiaoYanBiJi.objects.filter(~Q(pk=3)) # 聚合函数 # Avg平均、Count数量、Max最大,Min最小、Sum求和 # from django.db.models import Sum XiaoYanBiJi.objects.aggregate(Sum('bread')) # aggregate的返回值是一个字典类型 {'属性名__聚合类小写':值} # count一般不使用aggregate()过滤器 XiaoYanBiJi.objects.count() # 排序 XiaoYanBiJi.objects.all().order_by('bread') XiaoYanBiJi.objects.all().order_by('-bread') # 关联查询 # 由一到多的访问语法: people = EthanYan.objects.get(id=1) 一对应的模型类对象.多对应的模型类名小写_set prople.note_set.all() # 由多到一的访问方法 note = XiaoYanBiJi.objects.get(id=1) # 多对应的模型类对象.关联类属性_id note.xiaoyanbiji_id # 由多模型类条件查询一模型类数据 关联模型类名小写__属性名__条件运算符=值 # 如果没有“__运算符”部分,表示等于 # 查询文章,要求文章的作者为小闫同学 XiaoYanBiJi.objects.filter(ethan__name='小闫同学') # 查询文章,要求文章中的作者描述包含“闫” XiaoYanBiJi.objects.filter(ethanyan__hcomment__contains='闫') # 由一模型类条件查询多模型类数据 一模型类关联属性名__一模型类属性名__条件运算符=值 # 如果没有"__运算符"部分,表示等于 # 查询文章名为“Django”的所有作者 EthanYan.objects.filter(xiaoyanbiji_btitle='Django') # 查询文章阅读量大于30的所有作者 EthanYan.objects.filter(xiaoyanbiji_bread__gt=30) # 修改 # save ethanyan = EthanYan.objects.get(ename='小闫同学') ethanyan.save() # update EthanYan.objects.filter(ename='小闫同学1').update(ename='小闫同学') # 删除 ethanyan = EthanYan.objects.get(id=3) ethanyan.delete() EthanYan.objects.filter(id=14).delete()