Django框架基础知识(面试题)

本文详细介绍了Django框架的基础知识,包括项目创建、MVC/MVT架构、ORM数据库操作、中间件、性能优化、RESTful API设计以及HTTP请求处理流程。还涵盖了面试中常见的Django相关问题,如Django的缓存机制、数据库查询(get和filter的区别)、HTTP状态码、跨域请求解决方案等。此外,还讨论了Django与Nginx、uWSGI的配合使用,以及Django中session和cookie的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django框架

1.Django创建项目的命令

django-admin startproject 项目名称

python manage.py startapp 应用app名

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 页面.

(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 进行查表的语句(多个语句)

字段查询

all():返回模型类对应表格中的所有数据。

get():

返回表格中满足条件的一条数据,如果查到多条数据,则抛异常:MultipleObjectsReturned, 查询不到数据,则抛异常:DoesNotExist。

filter():

参数写查询条件,返回满足条件 QuerySet 集合数据。

条件格式:

**模型类属性名** 条件名=值

注意:此处是模型类属性名,不是表中的字段名

关于 filter 具体案例如下:

判等exact

BookInfo.object.filter(id=1) 

BookInfo.object.filter(id exact=1)此处的 exact 可以省略

模糊查询  like

例:查询书名包含'传'的图书。contains

contains BookInfo.objects.filter(btitle    contains=’’)

空查询 where 字段名 isnull

BookInfo.objects.filter(btitle isnull=False)

范围查询 where id in (1,3,5)

BookInfo.objects.filter(id in=[135])

比较查询 gt lt(less than) gte(equal) lte

BookInfo.objects.filter(id gte=3)

日期查询

BookInfo.objects.filter(bpub_date year = 1980)

BookInfo.objects.filter(bpub_date gt = date(198011))

exclude:返回不满足条件的数据。

BookInfo.objects.exclude(id=3)

F 对 象

作用:用于类属性之间的比较条件。

from django.db.models import F

例:where bread > bcomment BookInfo.objects.filter(bread    gt =F(‘bcomment’))

例:BookInfo.objects.filter(bread    gt=F(‘bcomment’)*2)

Q 对 象

作用:用于查询时的逻辑条件。可以对 Q 对象进行&|~操作

from django.db.models import Q

BookInfo.objects.filter(id gt=3 bread gt=30)

BooInfo.objects.filter(Q(id gt=3) & Q(bread gt=3))

BookInfo.objects.filter(Q(id gt=3) | Q(bread gt=30))

例:BookInfo.objects.filter(~Q(id=3))

order_by 返 回 QuerySet

作用:对查询结果进行排序。

BookInfo.objects.all().order_by('id')

BookInfo.objects.all().order_by('-id')

BookInfo.objects.filter(id gt=3).order_by('-bread')

聚合函数

作用:对查询结果进行聚合操作。

sum count max min avg

aggregate:调用这个函数来使用聚合。

from django.db.models import SumCountMaxMinAvg

例:BookInfo.objects.aggregate(Count('id'))

{'id count': 5} 注意返回值类型及键名

例:BookInfo.objects.aggregate(Sum(‘bread’))

{‘bread    sum’:120}  注意返回值类型及键名

count 函 数

作用:统计满足条件数据的数目。例:统计所有图书的数目。

BookInfo.objects.all().count()

例:统计 id 大于 3 的所有图书的数目。

       BookInfo.objects.filter(id gt = 3).count()

模型类关系

1)一对多关系

例:图书类-英雄类

models.ForeignKey() 定义在多的类中。

2)多对多关系

例:新闻类-新闻类型类

models.ManyToManyField() 定义在哪个类中都可以。

3)一对一关系

例:员工基本信息类-员工详细信息类

models.OneToOneField() 定义在哪个类中都可以。

5.django 中间件的使用

Django 在中间件中预置了六个方法,这六个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下:

(1)初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件。

def init ():

      pass

<think>好的,我现在需要帮用户整理关于Django框架的基础面试题。用户之前已经要求过详细的知识点和细节,现在可能是在准备面试,需要一些常见的初级问题来复习。我得先回顾一下之前给出的内容,确保不重复但又能补充基础面试题。 首先,用户提到的是“比较基础的面试题”,所以我得聚焦在核心概念和常见问题上。应该包括MVT架构、路由配置、ORM操作、模板使用、表单处理、中间件、用户认证等基础内容。同时,要避免太深入的高级话题,比如信号机制或缓存策略,这些可能属于进阶问题。 接下来,我需要将问题分类,可能分为概念类、代码示例类、配置类、实战类和扩展类。这样结构清晰,用户复习起来也方便。例如,概念类可以问MVT模式是什么,各个组件的作用;代码示例类可以展示如何定义一个模型或处理表单;配置类可能涉及settings.py的重要设置。 另外,用户之前已经提到过ORM的优化方法,比如select_related和prefetch_related,这里需要再次强调,因为这是面试中的高频问题。同时,中间件的执行顺序也是一个重点,需要详细说明请求和响应阶段的处理顺序。 还要考虑用户可能遇到的常见问题,比如GET和POST的区别,模板继承如何实现,如何处理静态文件等。这些基础问题在面试中经常出现,必须涵盖到。 需要注意的是,答案部分要简洁明了,直接回答问题的核心,避免冗长。例如,解释中间件时,可以简明扼要地指出它们的执行顺序和例子。 最后,确保所有内容用中文,符合之前的格式要求,使用适当的代码块和项目符号,保持结构清晰。检查是否有遗漏的基础知识点,比如用户认证系统的装饰器,或者部署时的关键命令,这些虽然可能稍微进阶,但作为基础面试题有时也会涉及。</think>以下为Django框架基础面试题及解析(建议背诵): --- ### 一、概念类基础题 1. **Django的MVT模式是什么?** - **模型(Model)**:数据库操作层,通过ORM定义数据表结构 - **视图(View)**:业务逻辑处理层,接收请求返回响应 - **模板(Template)**:表现层,处理HTML渲染 ```python # 典型流程:URL → View → Model → Template → Response ``` 2. **中间件的作用及执行顺序?** - 处理请求/响应全局操作(如CSRF校验、身份认证) - 请求阶段:按注册顺序从上到下执行 - 响应阶段:逆向从下到上执行 --- ### 二、代码示例类 3. **如何定义包含外键的模型?** ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE) ``` 4. **如何处理表单POST请求?** ```python def register(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # 验证处理... return redirect('/success/') return render(request, 'register.html') ``` --- ### 三、配置操作类 5. **settings.py必须配置哪些项?** - `SECRET_KEY`:加密签名密钥 - `DATABASES`:数据库连接配置 - `INSTALLED_APPS`:已安装应用列表 - `ALLOWED_HOSTS`:允许访问的主机(生产环境) 6. **如何配置静态文件路径?** ```python STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] ``` --- ### 四、实战问题类 7. **`filter()`与`get()`的区别?** - `filter()`:返回QuerySet(可能包含多个对象) - `get()`:返回单个对象,查询不到或结果不唯一时抛出异常 8. **如何避免N+1查询问题?** - 使用`select_related()`优化外键查询 - 使用`prefetch_related()`优化多对多关系 ```python # 示例: books = Book.objects.select_related('author').all() ``` --- ### 五、扩展理解类 9. **CSRF防护原理?** - 通过中间件生成Token验证表单提交来源 - 模板中需添加`{% csrf_token %}`标签 - POST请求必须携带有效Token 10. **Django请求处理流程?** 1. 请求到达URL路由器 2. 匹配视图函数/类 3. 中间件预处理请求 4. 视图处理业务逻辑 5. 中间件后处理响应 6. 返回HTTP响应 --- ### 高频考点总结表 | 考点分类 | 典型问题 | 标准答案要点 | |----------------|----------------------------------------|--------------------------------| | 路由系统 | URL命名空间的作用? | 避免路由命名冲突 | | ORM操作 | `values()`与`values_list()`区别? | 返回字典 vs 元组 | | 模板系统 | 如何实现模板继承? | `{% extends %}` + `{% block %}` | | 安全机制 | 如何防范XSS攻击? | 自动转义HTML标签 | | 用户认证 | `@login_required`的作用? | 强制登录验证 | 建议结合具体代码实践记忆,重点掌握: 1. ORM查询链式调用 2. 类视图的`as_view()`方法原理 3. 迁移文件的生成与应用 4. 表单的验证流程 5. 中间件的自定义开发方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值