Django基本原理

最近工作实在是无聊,正好我做模型有前端展示的需求,因此想自己做个界面出来,我想了一下,做客户端太麻烦了,还是做个网页吧,这样给别人用的时候也方便一些,所以开始进入Django的大坑。
在学习Django之前,我是有一定的Python基础的,因此,我百度一下,好像大家学习Django都是从建立一个博客开始的,我想,那我也整整吧。于是乎,我找了一篇帖子,开始依葫芦画瓢,帖子地址如下:
https://www.cnblogs.com/fnng/p/3737964.html

第一步:创建mysite工程项目

打开命令行,输入如下命令:

django-admin.py startproject mysite

目录结构如下:

这里写图片描述

然后又按照博客上面的操作创建blog应用,命令行代码如下:

python manage.py startapp blog

然后得到了如下的目录结构:

这里写图片描述

这下彻底懵逼了,一头雾水,不知道这么多.py文件到底是干啥的呢?后来在知乎上找到一篇文章,说的算是稍微清楚了一些,现总结如下:
(知乎地址:https://www.zhihu.com/question/26235428,参考“地球的外星人君”)

首先:
Django是Python的web开发框架,遵循MVC设计模式,但是在Django中通常称为MTV,即models-template-views。

1)views和URL
views是业务逻辑层,在Django里面views通常是一个的views.py模块,放在对应的包里。views.py里面是具体的逻辑函数,每一个函数对应着一个或多个模版,为了建立模版与视图的联系,还要有一定的路由机制,于是Django通常在根目录有一个路由程序urls.py。路由由patterns来创建,用正则表达式来描述,极大地提高了路由机制的灵活性。
例如:

#views.py
def home(request):
    values = request.META.items()
    values.sort()
    return render_to_response('home.html',{"values":values})

#urls.py
from django.conf.urls.defaults import *
    urlpatterns = patterns('',('^$',home),)

在这里request参数是必须的,但是你可以任意命名,只要符合规范即可,request包含页面的请求信息。render_to_response在django.shortcuts里,所以你还要在前面声明form django.shortcuts import render_to_response。request.MATE里含有所有的请求界面信息和用户信息。sort()是对list从小到大排序。返回值的意思就是向home.html模版提交一个values变量。urls中patterns中的元组添加了正则的导向规则:除去原地址匹配’^$’者导向home。当然这前提是views.py文件与urls.py在同一个文件夹里面否则就要引用home的命名空间。

2)模板(template)

模版在Django中是显示数据的地方,通常为HTML格式,在模版中Django的处理逻辑要写在{% %}中,而要显示的变量要写在{{ }}中。Django的母板页可以用任何文档充当,前提是要用{% block name %}{% endblock %}声明要填充或替换的块,而使用时只需{% extends 母版名字 %}然后调用相应的块就可以了。

3)models

在setting.py 中的database的字典中配置数据库。配置完成后 使用manage.py startapp来创建app在models中编写python代码描述实体映射。比如:

#models.py
class Publisher(models.Model):
    name = models.CharField(max_length = 30)
    website = models.URLField()

def __unicode__(self):
    return self.name

class Meta:
    ordering = ['name']

models包含在django.db中,里面封装了模型类的通用接口。CharField()是创建varchar型数据,参数有max_length,blank,verbose_name等。分别表示最大长度、是否为空、显示名称。def__unicode__提供了装箱后的默认显示,如果没有设置此函数,默认显示object类型。class Meta规定了模型的默认排序字段。

总体来看,整个机制如下图所示:

这里写图片描述

### Django 框架工作机制与原理 #### 请求响应流程解析 当客户端发起请求到达服务器时,Django 首先会接收到这个HTTP请求并将其传递给WSGI应用实例。此过程通过`wsgi.py`文件中的代码实现: ```python from django.core.wsgi import get_wsgi_application application = get_wsgi_application() ``` 接着,应用程序依据配置好的URL映射表寻找匹配路径[^2]。 #### URL 路由分发机制 在`urls.py`中定义了路由规则列表`urlpatterns`,这些规则指定了不同URL模式对应的具体视图函数或类。例如: ```python from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ] ``` 每当有新的请求进来时,Django 就会在上述列表里查找最合适的条目,并调用相应的处理器。 #### 视图处理逻辑执行 一旦找到对应的路由项之后,就会触发相应视图方法的运行,在这里可以编写Python代码来进行数据获取、模板渲染等工作。比如下面这段简单的返回字符串消息的例子展示了基本操作方式: ```python from django.http import HttpResponse def index(request): return HttpResponse('Hello, world!') ``` 值得注意的是,虽然表面上看不出来明显的控制器组件存在,但实际上这部分功能已经被内置到了框架内部深处,使得开发者能够专注于业务本身而不必关心底层细节[^4]。 #### 数据库交互支持 对于持久化存储方面的需求,Django 提供了一套强大而又灵活的对象关系映射器(ORM),允许连接到多种类型的数据库系统如 SQLite、MySQL、PostgreSQL 等等[^3]。这不仅简化了SQL语句的手动构建过程,同时也增强了跨平台兼容性和安全性保障措施。 综上所述,整个Django 应用程序的工作流是从接收外部访问开始经过一系列中间件过滤后进入核心引擎进行分析判断再转交给适当位置最终形成回应反馈给用户端这样一个完整的循环体系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值