Django之初入门

一)Django简介

1.简介

Django是一个开源的Python Web框架,它以简洁高效的方式帮助开发者构建复杂的Web应用程序。Django采用了MVC(Model-View-Controller)的架构模式,通过强大的工具和功能,提供了一套完整的解决方案,使开发过程更加简单、快速和可扩展。
Django拥有丰富的内置功能,包括ORM(对象关系映射),用于管理和操作数据库的模块;表单验证系统,用于处理用户输入数据的验证和处理;自动化的管理界面,用于管理网站的后台;以及强大的URL路由系统,用于定义URL和视图函数之间的映射关系。
此外,Django还支持插件化开发,开发者可以通过使用第三方插件来扩展框架的功能。Django的插件生态系统非常丰富,涵盖了各种常见需求,如用户认证、缓存、国际化等。
Django还注重安全性,提供了一系列的安全机制,如跨站点请求伪造(CSRF)保护、XSS(跨站点脚本)防御、SQL注入防御等。
总之,Django是一个功能强大、易于学习和使用的Web开发框架,它的高度可定制性和灵活性使得开发者能够构建出高质量、可扩展的Web应用程序。无论是开发小型网站还是大型企业级应用,Django都是一个值得考虑的选择。

2.关于MVC与MTV的解释

MVC可以分为三个字母理解:

  • M----model,即模型,数据库操作
  • V----view,即视图,前端页面
  • C----Controller,即控制器,控制访问逻辑

1695184817563.png
关于MVC的优势也有很多,例如:

  • 低耦合
  • 开发快捷
  • 部署方便
  • 可重用性高
  • 维护成本低

MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
1695184862496.png
MTV也可以分为三个字母理解:

  • M----model,即模型,数据库操作
  • T----template,即模板,前端网页页面(html)
  • V----view,即视图,业务逻辑,在适当的时候调用M和T

1695184853638.png

3.总结

Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容。
Django并不是完全的MVC模型,只是说Django是基于“MVC”模型开发出来的“MTV”模型。

二)初体验

1.安装

Django的版本较多,其中更是有着Django1和Django2的较大差分,那么本文为了避免较大的不兼容,所以推荐使用Django3.2的版本。
那么如何安装呢,安装方式与python的插件的安装不想而同,皆以pip方式:

pip install django==3.2

当然你也可以在前指定一个下载网址:

pip install -i https://pypi.douban.com/simple django==3.2
2.启动项目

Django的项目创建其实较为简单,我们只需要指定路径,在cmd中输入命令,即可任其自由,它会替我们做好工作:

#创建项目
django-admin startproject 项目名

例如,我需要在我的F盘的Djangopro文件夹中创建一个名为test1的项目:
image.png
我们输入命令后可以在文件中查看效果:
image.png
image.png
可以看见我们test1项目文件夹中有着一份manage.py和一份test1文件夹中包含着所有必须的py文件。

python脚本作用
init.py一个空 Python 脚本,存在的目的是告诉 Python 解释器,这个目录是一个Python 包
settings.py放 Django 项目的所有设置
urls.py存放项目的 URL 模式
wsgi.py用于运行开发服务器和把项目部署到生产环境的一个 Python 脚本

manage.py脚本文件提供了一系列维护 Django 项目的命令,通过它可以运行内置的 Django 开发服务器,可以测试应用,还可以运行多个数据库命令。几乎每个 Django 命令都要调用这些脚本。
现在我们可以用pycharm去打开这个项目,让它运行起来。
在pycharm中选中这个项目路径:
image.png
个人建议是选择一个新的窗口打开,即选择new window:
image.png
打开后我们就可以清晰的看见一个项目的基本结构:
image.png
现在我们抓紧时间启动我们的第一个项目看看效果,在项目的命令行输入:

python manage.py runserver

image.png
我们可以看见一个重要的网址名为:http://127.0.0.1:8000/。这个就是运行起来的项目的成功标志,可以在浏览器中输入此网址查看:
image.png
至此,我们的第一个Django项目就圆满启动了。

3.关于urls

urls.py更多的是负责项目url的存储与调用。我们可以做一个小实践在urls.py编写一些小程序:
image.png
那么”def hello“就是我们编写的一个函数,path是指定的访问路径,我们还需要导入HttpResponse包以完成这次的实践,那么在浏览器中输入我们编写的路径会发生什么呢?
image.png
我们还可以根据自己的需求不断增多,至此,实践结束。

4.关于app(应用)

django的app是指在一个django项目中的一个子功能模块的应用。一个项目可以有多个app,每个app负责处理特定的功能和模块。创建一个新的app可以使用命令(在Django的项目命令行中输入):

python manage.py startapp app_name

在项目的层级结构中,每个app都有自己的文件夹和配置文件。
那么我们现在创建一个名为test2的app作为例子:
image.png
在运行完命令后,我们可以看见结构目录那里多了一个名为test2的目录
image.png
这就表示我们创建成功。
点开test2目录,我们可以看见一个view.py的py文件,那么之前我们说过,view负责业务逻辑,这是什么意思,我们一般可以将函数放进view,然后urls.py这个文件就只会负责path也就是路由分发,这样程序不会过于臃肿,也极大的提升了程序的可看性。
该如何做?首先我们需要将urls之前创建的hello函数放入test2中的view.py:
image.png
那么urls.py就只剩下path路径了:
image.png
当然,我们需要使用from…impor…命令去导入test2中的view,不然无法使用hello函数。那么现在我们在浏览器中输入http://127.0.0.1:8000/wang会发生什么?
image.png
可以看见,并不影响我们的运行效果,但是我们py界面的简洁性增加,程序也不再臃肿。

5.关于路由

路由系统本质上是URL和函数的对应关系。
在Django中,路由系统是指用于将URL映射到相应的视图函数的机制。它负责将进来的URL请求与对应的视图函数进行匹配,并将请求转发给正确的视图函数进行处理。
Django的路由系统主要由以下几个部分组成:

  • URL模式:URL模式是指定义URL匹配规则的模式。在Django中,URL模式可以使用正则表达式来匹配URL。URL模式可以直接在URLconf中定义,也可以使用include()函数将URL模式分割成多个模块。
  • URLconf:URLconf是指URL配置文件,它定义了URL模式与视图函数之间的映射关系。在Django中,每个应用都有自己的URLconf文件,用于定义该应用内的URL模式。
  • 视图函数:视图函数是处理URL请求的函数,它接收请求对象作为参数,并返回一个响应对象。在Django中,视图函数可以是普通的Python函数,也可以是基于类的视图。
  • URL反向解析:URL反向解析是指根据视图函数的名称和参数,生成对应的URL。Django提供了reverse()函数用于在模板中进行URL反向解析,也可以在视图函数中使用reverse()函数生成重定向URL。

通过使用路由系统,可以实现灵活的URL匹配和处理,使得开发者能够更好地组织和管理项目的URL结构,并将不同的URL请求分发给对应的视图函数进行处理。

a.传统路由

传统的路由编写方式,view负责函数 ,urls.py界面我们只需要编写url就可以。例如之前我们在关于url中做的小实践,但是我们也可以在其中附带参数,在介绍如何附带参数前,我们需要知道get,post等方式的不同:
get请求分为:

  • 无参数请求:只有路径,没有参数--- [http://127.0.0.1:8000/wang/12/](http://127.0.0.1:8000/news/12/)
    
  • 带参数请求:在路径后面跟上 ?参数名=参数值---[http://127.0.0.1:8000/wang/?n_id=2](http://127.0.0.1:8000/news2/?n_id=2)
    

那么如何在程序中使用参数?

urlpatterns = [path('admin/<int:n_id>/', admin.site.urls),path('wang/',hello)
]

其中的int:n_id就是参数,int是指明参数是整形,而n_id就是参数名,当然你可以根据自身习惯去取名,在这里我们再复习下int这些数据类型:

  • nt,整数
  • str,字符串 /
  • slug,字母+数字+下滑线±
  • uuid,uuid格式
  • path,路径,可以包含 /

我们现在编写一个带参数的函数:
方法为:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
url的path为:
image.png
最终效果:http:127.0.0.1:8000/work/1/
image.png
当然我们也可以选择?带参数,只需要改变下方法为:
image.png
而url的path改为:
image.png

b.正则表达式路由

正则表达式路由在Django1中用的较多,在Django2中用的较少。当然,正则表达式也有人欢喜有人愁,看个人。url映射一般是一条正则表达式,“^” 字符串的开始,“$“ 字符串的结束。一般以?p开头。
我们需要使用re_path模块来使用正则表达式,所以在使用正则表达式时不要忘记导入:

from  django.urls  import re_path

使用正则表达式时我们需要在urls.py界面设定好正则:
image.png
方法为:
image.png
这时我们只需要在url输入http://127.0.0.1:8000/work/1/,就会有以下效果:
image.png

c.路由分发

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

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

相关文章

Spring面试题11:什么是Spring的依赖注入

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的依赖注入 依赖注入(Dependency Injection)是Spring框架的一个核心特性,它是指通过外部容器将对象的依赖关系注入到对象中,从而…

论文阅读-Group-based Fraud Detection Network on e-Commerce Platforms

目录 摘要 1 Introduction 2 BACKGROUND AND RELATED WORK 2.1 Preliminaries 2.2 Related Works 3 MODEL 3.1 Structural Feature Initialization 3.2 Fraudster Community Detection 3.3 Training Objective 4 EXPERIMENT 4.1 Experimental Setup 4.2 Prediction …

laravel 阿里云短信发送

示例 一、安装 安装&#xff1a;composer require mrgoon/aliyun-sms dev-master 二、打开config/app.php&#xff0c;添加配置代码 1、‘providers’ 配置组下添加 Mrgoon\Aliyunsms\AliyunsmsServiceProvider::class, 2、‘aliases’ 配置组下添加 Aliyunsms>Mrgoon…

记一次STM32F4 HAL IAP开发过程踩坑

第一次在HAL库上做IAP&#xff0c;不太熟悉库结构&#xff0c;被坑了一早上… MCU上做了一个shell&#xff0c;实现了goto命令跳转到APP区执行&#xff08;只是为了开发时方便&#xff09;。跳转到APP前和以前一样清理了所有初始化过的外设&#xff0c;也对中断进行了处理&…

Qt5开发及实例V2.0-第十九章-Qt.QML编程基础

Qt5开发及实例V2.0-第十九章-Qt.QML编程基础 第19章 QML编程基础19.1 QML概述19.1.1 第一个QML程序19.1.2 QML文档构成19.1.3 QML基本语法 19.2 QML可视元素19.2.1 Rectangle&#xff08;矩形&#xff09;元素19.2.2 Image&#xff08;图像&#xff09;元素19.2.3 Text&#xf…

机器人如何有效采摘苹果?

摘要&#xff1a;本文利用动捕数据构建拟人运动模型&#xff0c;对比观察两种苹果采摘模式&#xff0c;并对系统性能进行全面评估&#xff0c;为提高机器人采摘效率提供创新方法。 近期&#xff0c;一项关于苹果采摘机器人的有趣研究—— "Design and evaluation of a rob…

【完美解决】GitHub连接超时问题 Recv failure: Connection was reset

问题&#xff1a; 已经开了梯子但是在Idea中使用git&#xff08;GitHub&#xff09;还是连接超时Recv failure: Connection was reset。此时需要让git走代理。 解决方案&#xff1a; 1.对右下角网络点击右键 -> 打开网络和Internet设置 2.代理 -> 查看到地址和端口号…

图像处理之《基于语义对象轮廓自动生成的生成隐写术》论文精读

一、相关知识 首先我们需要了解传统隐写和生成式隐写的基本过程和区别。传统隐写需要选定一幅封面图像&#xff0c;然后使用某种隐写算法比如LSB、PVD、DCT等对像素进行修改将秘密嵌入到封面图像中得到含密图像&#xff0c;通过信道传输后再利用算法的逆过程提出秘密信息。而生…

React中的受控组件(controlled component)和非受控组件(uncontrolled component)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 组件⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是…

【jmeter】jmeter引用变量,变量值传递失败

最近在用jmeter做接口测试的时候&#xff0c;发现有个变量&#xff0c;参数值一直没有传递进来&#xff0c;导致request的时候&#xff0c;请求体里面一直是${}变量的形式。 后来经过排查发现&#xff0c;是因为我在定义用户变量的时候&#xff0c;在这个now后面多加了一个空格…

ps[001] 初学创建剪切蒙版

前置条件&#xff1a;PS2020版本 技能应用&#xff1a;ps 海报标题和图片结合 1、画布1300*1300像素&#xff0c;altdel设置背景为前景色 2、准备一张绿色的海报&#xff0c;可以百度宫崎骏&#xff0c;找张绿色的图片就可以了 3、拉个文字款&#xff0c;写个SUMMER英文体&a…

《开发实战》17 | 异步处理好用,但非常容易用错

大多数业务项目都是由同步处理、异步处理和定时任务处理三种模式相辅相成实现的。区别于同步处理&#xff0c;异步处理无需同步等待流程处理完毕&#xff0c;因此适用场景主要包括&#xff1a; 服务于主流程的分支流程。比如&#xff0c;在注册流程中&#xff0c;把数据写入数…

SpringAOP入门案例

package com.elf.spring.aop.aspectj; /*** author 45* version 1.0*/ public interface UsbInterface {public void work(); }package com.elf.spring.aop.aspectj; import org.springframework.stereotype.Component; /*** author 45* version 1.0*/ Component //把Phone对象…

什么是WhatsApp群发,WhatsApp协议,WhatsApp云控

那么WhatsApp群控云控可以做什么呢&#xff1f; 1、获客 自动化引流&#xff0c;强大的可控性&#xff0c;产品快速拓客 2、导流 一键式傻瓜化自动加好友&#xff0c;群发&#xff0c;朋友圈营销 3、群控 一键式拉群好友&#xff0c;建群&#xff0c;进群 …

力扣236 补9.14

做不来&#xff0c;我做中等题基本上都是没有思路&#xff0c;这里需要先遍历祖先节点&#xff0c;那必然用先序遍历&#xff0c;这题还是官方题解容易理解&#xff0c;第二火的题解反而把我弄得脑袋昏昏的。 class Solution { TreeNode ans; public TreeNode lowestCommonAnce…

公众号迁移多久可以完成?

公众号账号迁移的作用是什么&#xff1f;只能变更主体吗&#xff1f;长期以来&#xff0c;由于部分公众号在注册时&#xff0c;主体不准确的历史原因&#xff0c;或者公众号主体发生合并、分立或业务调整等现实状况&#xff0c;在公众号登记主体不能对应实际运营人的情况下&…

Django之视图

一&#xff09;文件与文件夹 当我们设定好一个Djiango项目时&#xff0c;里面会有着view.py等文件&#xff0c;也就是文件的方式&#xff1a; 那么我们在后续增加app等时&#xff0c;view.py等文件会显得较为臃肿&#xff0c;当然也根据个人习惯&#xff0c;这时我们可以使用…

2023-9-23 最大不相交区间数量

题目链接&#xff1a;最大不相交区间数量 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n;struct Range {int l, r;bool operator< (const Range &W) const {return r < W.r;} }range[N];int main() {cin >…

IDEA最新激 20活23码

人狠话不多 大家好&#xff0c;最近Intelli Idea官方的校验规则进行了更新&#xff0c;之前已经成功激20活23的Idea可能突然无法使用了。 特地从网上整理了最新、最稳定的激20活23码分享给大家&#xff0c;希望可以帮助那些苦苦为寻找Idea激20活23码而劳累的朋友们。 本激23…

前端框架之争:Vue.js vs. React.js vs. Angular

文章目录 Vue.js - 渐进式框架的魅力简单易用组件化开发生态系统和工具适用场景 React.js - 高性能的虚拟DOM虚拟DOM单向数据流社区和生态系统适用场景 Angular - 一站式框架完整的框架双向数据绑定类型安全适用场景 如何选择&#xff1f;项目规模生态系统技能和经验性能需求 结…