django面试四

Django的优点

功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。

完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。

强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。

Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。

自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

Django debug信息详尽: 很容易找出代码错误所在。

Django的缺点

Django自定义模板
在app应用下创建templatetags文件夹,如:users/templatetags
创建_init_.py文件
示例代码 filters.py
#coding=utf-8
from django.template import Library
register = Library()

@register.filters
def mod(value):
return value%2
模板中使用过滤器
{% load filters %}
{% if book.id|mod %}
装饰器
记录函数执行时间的装饰器
decorator_1.py
# coding=utf-8
def changeMod(pre=‘isSecond‘):
"""扩展原有装饰器功能,在原有装饰器基础上设置外部变量"""
def tastTime(func):
import time

def wrapper(*args, **kw):
t1 = time.clock()
if pre == ‘isSecond‘:
func(*args, **kw)
t2 = time.clock()
print ‘Having using %.9f times‘ % (t2 - t1)
else:
func(*args, **kw)
t2 = time.clock()
print ‘Having using {} times‘ .format(t2 - t1)
return wrapper
return tastTime

@changeMod(pre=‘isMin‘)
# @changeMod()
def printWord(word):
print word

printWord(‘hello world‘)

斐波那契数列
# coding=utf-8
def fib1(n):
"""递归方式,效率较慢"""
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n - 1) + fib(n - 2)

# print fib1(10)

# ******************************************** #

dic = {0: 0, 1: 1}

def fib2(n):
"""递归方法,并检验是否计算过"""
if n not in dic:
dic[n] = fib2(n - 1) + fib2(n - 2)
return dic[n]

# print fib2(10)

# ******************************************** #

def fib3(n):
"""迭代方式"""
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a

# print fib3(10)

# ******************************************** #
快速排序
# coding=utf-8
def quickSort(lists):
less = []
privotList = []
more = []

if len(lists) <= 1:
return lists
else:
privot = lists[0]
for i in lists:
if i < privot:
less.append(i)
elif i > privot:
more.append(i)
else:
privotList.append(i)

less = quickSort(less)
more = quickSort(more)

return less + privotList + more

lists = [1, 2, 3, 4, 5, 7, 1, 5, 2, 0, 8, 5, 8, 2, 9, 4]

new_lists = quickSort(lists)
print(new_lists)
冒泡排序
# coding=utf-8
def bubbleSort(lists):
for i in range(0, len(lists)):
for j in range(i + 1, len(lists)):
if lists[i] > lists[j]:
lists[i], lists[j] = lists[j], lists[i]
return lists

lists = [1, 2, 34, 5, 6, 7, 8, 0, 123, 5, 61, 23, 1, 2, 5, 0]

new_lists = bubbleSort(lists)
print new_lists
桶排序
# coding=utf-8
def bucketSort(lst):
pre_list = [0] * 10
for sorce in lst:
pre_list[sorce - 1] += 1

result = []
i = 0
while i < len(lst):
j = 0
while j < pre_list[i]:
result.append(i + 1)
j += 1
i += 1
print result

lst = [7, 9, 3, 5, 7, 10, 5, 4, 8, 3]
bucketSort(lst)
Bootstrap栅格
考察实现过程
css中使用@media,来规定每一个class不同尺寸占用的栅格数

/* lg占用3个栅格,md占用3个栅格,sm占用6个栅格 */
<div class="col-lg-3 col-md-3 col-sm-6"><div class="box"></div></div>
redis相关
5种类型:string,list,hash,set,zset
set一个数字,拿出来的值是什么
考察是否知道在存的时候有数据类型转换

python@ubuntu:~$ redis-cli
127.0.0.1:6379> get keys*
(nil)
127.0.0.1:6379> set isNumber 10
OK
127.0.0.1:6379> get isNumber
"10"
127.0.0.1:6379>
Django用户认证系统
在Django中自定义身份验证

scrapy模块流程
scrapy框架解读--深入理解爬虫原理

生成器
迭代器
前后端分离
进程线程协程
进程资源控制
multiprocessing.Lock
multiprocessing.Semaphore
multiprocessing.Event
Git相关操作
MySQL查询
MySQL高可用性
MySQL高可用方案选型参考

MySQL索引原理
MySQL索引背后的数据结构及算法原理

时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度-总结

MySQL MongoDB Redis选择
HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流开源 NoSQL 数据库的 PK 两大主流传统 SQL 数据库

MySQL索引
MySQL索引及查询优化总结

索引是MySQL提高数据查询效率的数据结构

普通索引
create index indexName on MyTable(cloumnName(length));
alter MyTable add index indexName on (cloumnName(length));
drop index indexName on MyTable;
唯一索引
create unique index indexName on MyTable(cloumnName(length));
alter MyTable add unique index indexName on (cloumnName(length));
主键索引
一个表只能有一个主键
组合索引
CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

city VARCHAR(50) NOT NULL,

age INT NOT NULL

);
create index indexName on MyTable(username(16),city,age);
alter MyTable add index indexName (username(16),city,age);
上述建索引的方式相当于建立了下面三种组合索引(MySQL最左前缀)

username,city,age
username,city
username

下面几个sql会用到索引

select * from MyTable where username=‘admin‘ and city=‘BeiJing‘;
select * from MyTable where username=‘admin‘;
下面几个就不会走索引

select * from MyTable where username=‘admin‘ and age=20;
select * from MyTable where age=20;
建索引的时机
WHERE、ORDER_BY
在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引
例如:

like ‘Python%‘
会走索引

like ‘%Pyhton%‘;
like ‘%Python‘;
就不会走索引

全文索引:MyISAM,聚簇索引:InnoDB

其他注意点
因为在以通配符%和_开头作查询时,MySQL不会使用索引
索引不会包含有NULL值的列
不使用NOT IN和<>操作

大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。

过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。

性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。

模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。
---------------------
作者:大江狗
来源:CSDN
原文:https://blog.csdn.net/weixin_42134789/article/details/80753010
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/duanlinxiao/p/10540274.html

时间: 2024-07-29 19:03:23

django面试四的相关文章

Django基础四之模板系统

一 语法   模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法): {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身. 变量的命名包括任何字母数字以及下划线 ("_")的组合. 变量名称中不能有空格或标点符号. 深度查询据点符(.)在模板语言中有特殊的含义.当模版系统遇到点("."),它将以这样

django面试五

http和https的区别https协议需要到ca申请证书,一般免费证书很少,需要交费. 注:CA - certificate authority,身份认证,权威机构认证,CA认证: http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议 http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443. http的连接很简单,是无状态的 HTTPS协议是由SSL(安全套接层)+HTTP协议构建的可进行加密传输.身份认证的网络协议 要比h

Django 第四篇

模板的继承: 你首先继承一个html页面,继承了意味你拥有父模板所有的东西,你只需要在父模板的基础 上修改布局即可 第一步:在父模板划分多个区域 {% block 给区域起的名字 %} 父模板需要被重写或者重用的代码 {% endblock %} 第二步,在子模板继承父模板{% extends ‘父模板文件名’ %} 第三步,在子模板中重写父模板被划分的代码 {% block 给区域起的名字 %} 自己重写的代码 {% endblock %} 第四步,如果还想用父模板中的代码,可以重用父模板的方

面试(四)

下列变量论述错误的是:() A String a = “repeck” B char a = “repeck” C int a = 10 D  float a = 10.5f   2.定义一个数组int[] a = new int [10]通过哪种方式可以获得数组的长度;() A length() B a.length C a.char() D a.size   3.如下代码: class Animal{} class Dog extends Animal{} class Cat extends

django notes 四: Writing views

views 其实没什么可看的, 在  django  中 views 就是 controller, 是处理请求的, 就是一个普通的 python 方法. 一般从 request 中提取请求参数, 然后处理业务逻辑, 跟数据库和后台服务做交互,取回数据,渲染模板,将返回结果包装进  HttpResponse 然后返回. def view_index(request): return HttpResponse(content='hello world') def view_index(request

django(四)

一.数据调用下拉菜单内容 viwes.py from django.shortcuts import render,HttpResponse,render_to_response from django import forms from app01 import models class IndexForm(forms.Form): # c = [ # (1,'CEO'), # (2,'COO') # ] c = models.UserType.objects.all().values_lis

frist Django app — 四、 完善View

上一篇已经完成了polls的基本功能,接下来完善剩下的vote功能和并使用generic views改进请求处理view.包含表单的简单运用和前后台参数传递. 目录 vote:完善投票功能 generic views:改进views.py vote 编辑detail.html,添加投票投票功能 <h1>{{question.question_text}}</h1> {% if error_message %}<p><strong>{{ error_messa

python学习笔记--Django入门四 管理站点

上一节  Django入门三 Django 与数据库的交互:数据建模 "管理员界面"是基础功能中的重要部分.. 激活管理员界面 管理界面是 Django 中最酷的一部分.但是不是所有人都需要它,所以它是可选的.这也就意味着你需要跟着三个步骤来激活它. 在你的 models 中加入admin metadata. 不是所有的models都能够(或应该)被管理员编辑,你需要给models标记一个管理员接口(interface),通过给models添加一个内部类'admin'完成接口标记.所以

Django基础(四)

Django-4 知识预览 分页器(paginator) COOKIE 与 SESSION Django的用户认证 FORM 回到顶部 分页器(paginator) 分页器的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 >>> from django.core.pag