一、Django基础介绍

news2025/7/11 11:04:25

一、Django介绍

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。
Django学习线路
在这里插入图片描述
Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。

这个MVT模式并非django首创,在其他的语言里面也有类似的设计模式MVC,甚至可以说django里面的MVT事实上是借鉴了MVC模式衍生出来的。

M,Model,模型,是用于完成操作数据库的。

V,View,视图,里面的代码就是用于展示给客户端的页面效果。

C,Controller,控制器,是一个类或者函数,里面的代码就是用于项目功能逻辑的,一般用于调用模型来获取数据,获取到的数据通过调用视图文件返回给客户端。

而MVT指的是:

M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。

V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。

T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

MVT模型的工作流程
在这里插入图片描述

路由控制器将请求转发给对应的视图函数,完成业务逻辑,视图函数将从model中获取的数据嵌入到template中的模板文件(html)渲染成一个页面字符串,返回给客户端的流程。

二、安装django

pip install django     默认安装最新版本
pip install django==3.2  指定版本安装

三、运行Django

1:pycharm创建django项目

在这里插入图片描述
在这里插入图片描述

2:运行测试,使用命令行

python manage.py runserver

在这里插入图片描述
点击连接web页面进行测试
在这里插入图片描述

3:运行测试,使用pycharm运行

在这里插入图片描述
在这里插入图片描述

四、Django目录结构

创建一个django项目有如下文件:
在这里插入图片描述

│─ manage.py    # 终端脚本命令,提供了一系列用于生成文件或者目录的命令,也叫脚手架
|- templates    # 用于存放模板html文件的目录,可先删除,使用时再进行创建。
└─ study/       # 主应用开发目录,保存了项目中的所有开发人员编写的代码, 目录是生成项目时指定的
    │- asgi.py      # django3.0以后新增的,用于让django运行在异步编程模式的一个web应用对象
    │- settings.py  # 默认开发配置文件
    │- urls.py      # 路由列表目录,用于绑定视图和url的映射关系
    │- wsgi.py      # wsgi就是项目运行在wsgi服务器时的入口文件
    └- __init__.py

删除settings.py文件中的DIRS内容,此为默认templates目录存放路径
在这里插入图片描述

五、创建app

运行如下命令:

python manage.py startapp app01

运行完之后可以看到study项目下出现app01的文件夹
在这里插入图片描述
在这里插入图片描述
app目录讲解:

└─ app01         # 子应用名称
    |- migrations # 存放数据库的更新操作记录
    │- models    # 主要应用于数据库的操作
    │- views     # 该应用的视图模块,实现具体功能
    │- tests     # 该应用的单元测试模块
    │- apps      # 该应用的一些配置,自动生成
    │- admin.py  # 该应用的后台管理系统配置

对app01进行注册
在这里插入图片描述
在这里插入图片描述

六、添加路由

Route路由, 是一种映射关系!路由是把客户端请求的url路径和用户请求的应用程序[这里意指django里面的视图进行绑定映射的一种关系。

请求路径和视图函数不是一对一映射关系!

在django中所有的路由最终都被保存到一个变量 urlpatterns., urlpatterns必须声明在主应用下的urls.py总路由中。这是由配置文件settings设置的。

在django运行中,当客户端发送了一个http请求到服务端,服务端的web服务器则会从http协议中提取url地址, 从程序内部找到项目中添加到urlpatterns里面的所有路由信息的url进行遍历匹配。如果相等或者匹配成功,则调用当前url对象的视图方法。
在给urlpatterns路由列表添加路由的过程中,django一共提供了2个函数给开发者注册路由.

from django.urls import path      # 字符串路由    本章节重点讲解字符串路由
from django.urls import re_path   # 正则路由,会把url地址看成一个正则模式与客户端的请求url地址进行正则匹配
# path和re_path 使用参数一致.仅仅在url参数和接收参数时写法不一样

在全局urls.py中添加login路径

from django.contrib import admin
from django.urls import path
from app01 import views     ###从app01导入views模块
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),   ###添加login路径
]

app01中编辑views.py文件

from django.shortcuts import render,HttpResponse   ###导入HttpResponse

def login(request):
    return HttpResponse("登录成功")

运行study项目,在web界面访问
在这里插入图片描述

七、模板文件templates

模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术。它实现了把前端代码和服务端代码分离的作用,让项目中的业务逻辑代码和数据表现代码分离,让前端开发者和服务端开发者可以更好的完成协同开发。

静态网页:页面上的数据都是写死的,万年不变

动态网页:页面上的数据是从后端动态获取的(比如后端获取当前时间;后端获取数据库数据然后传递给前端页面)

Django框架中内置了web开发领域非常出名的一个DjangoTemplate模板引擎(DTL)。DTL官方文档

要在django框架中使用模板引擎把视图中的数据更好的展示给客户端,需要完成3个步骤:

在项目配置文件中指定保存模板文件的模板目录。一般模板目录都是设置在项目根目录或者主应用目录下。

在视图中基于django提供的渲染函数绑定模板文件和需要展示的数据变量

在模板目录下创建对应的模板文件,并根据模板引擎内置的模板语法,填写输出视图传递过来的数据。

在全局urls.py中添加user_list路径

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('user_list', views.user_list),
]

app01中编辑views.py文件

from django.shortcuts import render,HttpResponse

def login(request):
    return HttpResponse("登录成功")

def user_list(request):
    
    #根据app的注册顺序,在每个app的templates目录下找
    return render(request,"user.html")

在app01中创建templates目录并新建user.html文件
在这里插入图片描述
运行项目,访问web页面
在这里插入图片描述

八、静态文件

使用图片、视频、样式等静态文件时,需要在每个子目录下创建static目录
在这里插入图片描述
编辑html文件,添加图片,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>图片</h1>
<img src="/static/img/pic.jpg" alt="">
</body>
</html>

编辑urls.py文件以及app01下的views.py文件

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('user_list/', views.user_list),
    path('pic/', views.pic)
]
def pic(request):
    return render(request,"pic.html")

在这里插入图片描述
为防止之后static目录位置发生变化,html文件中修改过多,可使用以下方式:

{% load static %}     ###load static 加载目录 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>图片</h1>
<img src={% static 'img/pic.jpg' %} alt="">    ###此处引用,之后static路径发生变化,此处可不做修改。
</body>
</html>

九、参数导入以及重定向

  • 参数导入
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('user_list/', views.user_list),    urls.py文件中使用user_list路由
    path('pic/', views.pic)
]
def user_list(request):

    user_name = "tom"  ###views.py文件中添加变量
    return render(request,"user.html",{"user": user_name}) ##此处传入  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>欢迎{{ user }}登录</h1>   ####html文件中进行接收
</body>
</html>

访问界面
在这里插入图片描述
传入列表

def user_list(request):

    user_name = "tom"
    data_list = ["tom","lisa","david"]
    return render(request,"user.html",{"user": user_name,"user_list": data_list})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>欢迎{{ user }}登录</h1>
<hr>
<ul>
    <li>{{ user_list }}</li>   #########
</ul>
<hr>
<ul>
   {% for item in user_list %}   ###列表循环
    <li>{{ item }}</li>
    {% endfor %}
</ul>

在这里插入图片描述
传入字典

def user_list(request):

    user_name = "tom"
    data_list = ["tom","lisa","david"]
    data_dict ={"user": "tom","age": 18,"height": 180}
    return render(request,"user.html",{"user": user_name,"user_list": data_list,"user_info": data_dict})
<div>
    <span>欢迎{{ user_info.user }}登录,年龄{{ user_info.age }},身高{{ user_info.height }}</span>
</div>
</body>

在这里插入图片描述

  • 重定向
    登录login页面,重定向到user_list
def login(request):
    return redirect("/user_list")

可以看到被重定向到了user_list
在这里插入图片描述

十、请求和响应(get、post)

GET

编辑views.py文件

def user_list(request):

    print(request.method)   ###打印请求方式
    data_dict ={"user": "tom","age": 18,"height": 180}
    return render(request,"user.html",{"user_info": data_dict})

在这里插入图片描述

def user_list(request):

    ####打印请求方式
    print(request.method)

    ###在url上进行请求
    print(request.GET)

    data_dict ={"user": "tom","age": 18,"height": 180}
    return render(request,"user.html",{"user_info": data_dict})

在这里插入图片描述

POST

def user_list(request):

    ####打印请求方式
    print(request.method)

    ###在url上就行请求
    print(request.GET)

    ###打印post请求
    print(request.POST)

    data_dict ={"user": "tom","age": 18,"height": 180}
    return render(request,"user.html",{"user_info": data_dict})

编辑user.html

<body>
<form action="/user_list/" method="post">
    {% csrf_token %}    ###添加此参数,否则会出现403 forbiden
    <input type="text" name="user" >
    <input type="password" name="pwd" >
    <input type="submit" value="提交">

</form>

</body>

在这里插入图片描述

    ####打印请求方式
    print(request.method)

    ###在url上就行请求
    print(request.GET)

    ###打印post请求
    print(request.POST)

    ###响应 HttpResponse("返回内容"),内容字符串返回给请求者
    ###return HttpResponse("你好")
    
    ###响应读取html文件内容 + 渲染(替换) -> 字符串,返回给用户浏览器
    data_dict ={"user": "tom","age": 18,"height": 180}
    return render(request,"user.html",{"user_info": data_dict})

注:删除全局settings.py文件中的以下内容也可以防止403问题出现

'django.middleware.csrf.CsrfViewMiddleware',

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/406215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战

系列目录 【Spring Cloud Alibaba】&#xff08;一&#xff09;微服务介绍 及 Nacos注册中心实战 本文目录系列目录前言什么是RPC&#xff1f;Feign和OpenFeign都是什么&#xff1f;HTTP调用 vs Feign(RPC)调用单独使用Feign实战Feign核心源码解读Feign整体设计架构Spring Clo…

学生为什么要在CSDN写博客?

学生为什么要在CSDN写博客&#xff1f;引言写博客的好处构建知识体系提升写作能力扩展人脉为简历加分帮助他人为什么是CSDN如何写博客记录学习总结错误总结与展望引言 就目前来说&#xff0c;学生应该是使用各种博客最多的人&#xff0c;但却不是写博客的主体。在我看来&#…

软考-软件设计师 知识点整理(一篇就过了 建议收藏)

文章目录一 计算机组成CPU寻址方式校验码奇偶校验码&#xff08;只能检一位错&#xff0c;并且不能纠错&#xff09;循环冗余校验码CRC&#xff08;只能检错&#xff0c;不能纠错&#xff09;海明码计算机体系结构分类Flynn分类法&#xff08;理论存在&#xff1a;多指令单数据…

我用Python写了一个下载网站所有内容的软件,可见即可下,室友表示非常好用

Python 写一个下载网站内容的GUI工具&#xff0c;所有内容都能下载&#xff0c;真的太方便了&#xff01;前言本次要实现的功能效果展示代码实战获取数据GUI部分最后前言 哈喽大家好&#xff0c;我是轻松。 今天我们分享一个用Python写下载视频弹幕评论的代码。 之前自游写了…

VMware17虚拟机:下载和安装教程

签名&#xff1a;但行好事&#xff0c;莫问前程。 文章目录前言一、VMware虚拟机是什么&#xff1f;二、如何下载VMware虚拟机&#xff1f;1.打开VMware官方网站2.找到VMware17下载地址三、安装VMware17虚拟机1.双击exe文件2.点击下一步3.勾选许可协议&#xff0c;点击下一步4.…

Java单元测试介绍

文章目录单元测试单元测试基本介绍单元测试快速入门单元测试常用注解单元测试 单元测试基本介绍 单元测试: 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法&#xff0c;因此&#xff0c;单元测试就是针对Java方法的测试&#xff0c;进…

Error: EPERM: operation not permitted, mkdir ‘D:\software\nodejs\node_cache\_cacach两种解决办法

目录 报错情况&#xff1a;operation not permitted, mkdir ‘D:\software\nodejs\node_cache\_cacach 解决办法&#xff1a; 第一种&#xff1a;选择管理员身份运行命令行 第二种&#xff1a;node安装目录下设置users用户完全控制权限 报错情况&#xff1a;operation not …

电子工程师必须掌握的硬件测试仪器,你确定你都掌握了?

目录示波器示例1&#xff1a;测量示波器自带的标准方波信号输出表笔认识屏幕刻度认识波形上下/左右移动上下/左右刻度参数调整通道1的功能界面捕获信号设置Menu菜单触发方式触发电平Cursor按钮捕捉波形HLEP按钮参考资料频谱分析仪器信号发生器示波器 示例1&#xff1a;测量示波…

Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心

目录专栏导读一、什么是Nacos&#xff1f;二、注册中心演变及其设计思想1、RestTemplate调用远程服务2、通过Nginx维护服务列表&#xff08;upStream&#xff09;3、通过Nacos实现注册中心4、心跳版Nacos三、Nacos Discovery四、Nacos核心功能1、服务注册2、服务心跳3、服务同步…

【Jetpack】Jetpack 简介 ( 官方架构设计标准 | Jetpack 组成套件 | Jetpack架构 | Jetpack 的存在意义 | AndroidX 与 Jetpack 的关系 )

文章目录一、Google 官方推出的架构设计标准 Jetpack二、Jetpack 组成套件三、Jetpack 架构四、Jetpack 的存在意义1、提高开发效率2、最佳架构方案3、消除样本代码4、设备系统兼容性5、改善应用性能6、测试支持五、AndroidX 与 Jetpack 的关系一、Google 官方推出的架构设计标…

Termux安装完整版Linux(Ubuntu)详细步骤

一、Termux 1.Termux简介 Termux是 Android 平台上的一个终端模拟器&#xff0c;之所以称它为“模拟器”而非“虚拟机”&#xff0c;是因为它并非像 PC 端的 VirtualBox 等虚拟机软件那样&#xff0c;在宿主机中虚拟出一个完全独立且完整的系统环境&#xff0c;而只是提供一个…

MyBatis案例 | 使用映射配置文件实现CRUD操作——动态SQL优化条件查询

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JavaWeb Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&…

面试官:如何进行 JVM 调优(附真实案例)

前言 面试官&#xff1a;在工作中做过 JVM 调优吗&#xff1f;讲讲做过哪些 JVM 调优&#xff1f; 我一个QPS不到10的项目&#xff0c;上次问我缓存穿透缓存雪崩&#xff0c;这次问我 JVM 调优&#xff0c;我是真滴难。 不过大家别慌&#xff0c;热心的我给大家找来了几个满分…

一文学会IDEA中的Maven集成与创建(详细教程)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。

Anaconda环境搭建常见问题 conda不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 解决方案&#xff1a;配置环境变量 1.找到Anaconda Nvaigator单机右键 2.更多 3.打开文件所在位置 4.继续Anaconda Nvaigator单机右键&#xff0c;更多&#xff0c;选择文件…

Xilinx XDMA驱动代码分析及用法

Xilinx XDMA驱动代码分析及用法 先简单的介绍一下&#xff0c;赛灵思的XDMA的驱动是用于做什么的、他的主要功能就类似与网卡pcie接口的网卡驱动、用于控制主机与fpga设备进行pcie的通讯。通讯的主要方式是设备文件的读写&#xff0c;这里不清楚的同学可以看一下我上一篇文章。…

IDEA连接MySQL数据库并执行SQL语句使用数据

文章目录一、IDEA连接MySQL数据库&#xff08;一&#xff09;首先新建普通Java项目&#xff08;二&#xff09;连接数据库1、点击右侧DataBase2、点击加号&#xff0c;找到MySQL&#xff0c;添加数据库3、输入用户名和密码&#xff0c;点击**Test Connection**4、显示连接成功&…

深度分析| 数据防泄露技术再次“翻红”的思考与建议

此文章由天空卫士供稿 01、数据防泄露的定义 数据防泄露&#xff08;Data leakage prevention&#xff0c;DLP&#xff09;是指通过一定的技术和管理&#xff0c;防止组织内敏感数据或信息资产&#xff0c;违反安全约束而丧失组织控制、破坏数据机密性的策略和措施。数据防泄…

【云原生】裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程

??作者简介&#xff1a;大家好&#xff0c;我是&#xff0c;运维领域创作者&#xff0c;??阿里云ACE认证高级工程师?? 个人主页&#xff1a; ??支持我&#xff1a;点赞??收藏留言?? ??格言&#xff1a;你未必出类拔萃&#xff0c;但一定与众不同&#xff01;??…

[SSD4] 固态硬盘主控功能_SSD主控品牌

固态硬盘(Solid State Drives),简称SSD。它是一种电脑存储设备,由闪存(FLASH)、 闪存控制器、高速缓存(DRAM)组成。这是是固态硬盘的三个基本部件,对性能有关键影响。 了解一颗固态硬盘首先要从主控入手,主控对于固态硬盘的影响丝毫不亚于闪存。那么主控芯片对于固态硬盘…