Django全家桶

news2024/12/29 10:15:47

Django框架从入门到高级

(一)Django入门

Web应用

详细地址见:https://blog.csdn.net/DiligentGG/article/details/126606099?spm=1001.2014.3001.5501

  • Web框架本质
    web框架本质上可以看成是一个功能强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端。两者通过网络请求实现数据交互,从架构层面上简单的将Web框架看做是对前端,数据库的全方位整合。
    web框架可以理解为是基于互联网的web服务端(socket服务端)

在这里插入图片描述

纯手撸一个web框架

1.步骤

  • socket服务端代码
  • HTTP协议
  • 根据网址后缀的不同请求不同的内容
  • 请求方式:GET:朝服务端索要数据;POST:朝服务端提交数据
  • 从请求数据格式中筛选出用户输入的网址后缀

2.代码存在缺陷

  • socket代码重复编写轮子
  • 针对请求数据格式的处理复杂且重复
  • 针对不同的网址后缀的匹配方式过于简单

3.基于wsgiref模块
wsgiref模块解决了两个问题:socket代码重复编写造轮子和针对请求数据格式的处理复杂且重复。

动静态页面

动态页面的页面上数据是动态获取的,反之静态页面数据是写死的。

需求:
将字典数据传递到前端页面并且想要操作字典数据。
遇到问题:无法自己实现在html页面上使用类似于后端语法操作数据,即引出jinja2模块。

jinja2模块

概念:
jinja2能够让我们在html文件内使用类似于后端的语法来操作各种数据类型。
基本语法:
控制结构 {% %}

for循环模板语法
{% for user in user_data %}
   <tr>
      <td>{{ user.id }}</td>
       <td>{{ user.name }}</td>
       <td>{{ user.age }}</td>
   </tr>
{% endfor %}

变量取值 {{ }}

普通模板语法
<h1>{{ data }}</h1>
<h1>{{ data['name'] }}</h1>
<h1>{{ data.get('pwd') }}</h1>
<h1>{{ data.hobby }}</h1> 

注释 {# #}

python主流web框架之django框架

1.MVC与MTV模型(老刘博文编写,了解一下)

  • MVC
    Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:
    在这里插入图片描述
  • MTV
    Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:
    M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
    T 代表模板 (Template):负责如何把页面展示给用户(html)。
    V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
    除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
    在这里插入图片描述
    一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

2.django目录结构

  • init.py:主要做一些冷门配置
  • settings.py:项目配置文件
  • urls.py:对应关系(即路由配置)【路由层】
  • wsgi.py:django服务
  • manage.py:django入口文件
  • templates文件夹:存储项目所需要的html文件【模板层】

  • migrations文件夹:orm相关(数据库打交道的记录)
  • admin.py:django自带的后台管理
  • apps.py:创建应用之后用于应用的注册
  • models.py:存储与数据库表相关的类【模型层】
  • test.py:自带的测试文件
  • views.py:存储业务相关的逻辑代码(函数,类)【视图层】
  • db.sqlite3:自带的小型数据库

3.django小白必会三板斧

三板斧功能描述备注
HttpResponse主要用于直接返回字符串类型的数据return HttpResponse(‘你好’)
render主要用于返回html页面,并且支持模板语法return render(request, ‘func.html’)
redirect主要用于页面重定向return redirect(‘https://www.baidu.com’)

4.静态文件及相关配置

  • 静态文件概念:html页面上使用的不经常改变的资源(第三方框架文件;css文件;js文件;图片文件)
  • 静态文件一般都会放在static文件夹下
  • 针对静态文件资源的访问我们也需要提前开设相应的接口(考虑到静态文件资源不固定,所以应该在配置文件中配置。)
将项目同名文件夹下settings.py文件下配置:

STATIC_URL = '/static/'       # 接口前缀
# 静态文件资源配置
STATICFILES_DIRS = [
   os.path.join(BASE_DIR,'static')
]

5.请求方法
URL:统一资源定位符(简称网址)

  • GET请求(两种 HTTP 请求方法之一):
    朝别人索要数据,也可以携带额外的数据
    GET请求没有请求体(HTTP数据格式)
  • POST请求:
    朝别人提交数据,也可以携带额外的数据
    数据都是在请求体中,并且数据大小没有限制

注意:form表单默认的数据提交方式是get;要修改为post时需要在form action字段中添加method字段。

<form action="" method="post">
  • 参考博文:https://blog.csdn.net/dreamingbaobei3/article/details/95938517

6.request对象方法

  • request.method:获取请求方式,结果是纯大写的字符串;
  • request.POST:获取POST请求发来的普通数据(不包含文件)
request.POST.get() 默认只获取列表中最后一个数据值
request.POST.getlist() 获取键对应的整个列表 无论有几个数据值
  • request.GET:获取url后面携带的非敏感数据
request.GET.get() 默认只获取列表中最后一个数据值
request.GET.getlist() 获取键对应的整个列表 无论有几个数据值
  • 具体代码展示
def login(request):
   '''该函数将来会通过不同的请求方式触发,并且需要执行不同的业务逻辑代码'''
   # print(request.method)
   if request.method == 'GET':
       # 返回给前端一个登录页面
       return render(request,'login.html')
   elif request.method == 'POST':
       # 获取用户提交的数据
       # print(request.POST)   # <QueryDict: {'username': ['jason'], 'password': ['123']}>
       # res = request.POST.get('username')  # jsaon <class 'str'>
       print(request.POST)      # <QueryDict: {'username': ['jason', 'kevin', 'oscar'], 'password': ['123']}>
       res = request.POST.get('username')   # oscar <class 'str'> 默认只会拿最后一个数据
       res1 = request.POST.getlist('username')    # 获取键对应的整个列表,无轮有几个数据值
       print(res,type(res))

       print(request.GET)
       return HttpResponse("收到了")

django请求生命周期流程图

https://www.processon.com/diagrams

在这里插入图片描述

路由匹配

1.语法结构

path('网址后缀',函数名)

路由结尾的斜杠:

  • 默认情况下不写斜杠,django会做二次处理。
    第一次匹配不上,会让浏览器加斜杠再次请求
  • django配置文件(settings.py)中可以指定是否自动添加斜杠。
APPEND_SLASH = False

2.path转换器
当网址后缀不固定的时候,可以使用转换器来匹配;
转换器匹配到的内容会当做视图函数的关键字参数传入;
转换器有几个叫什么名字,那么视图函数的形参必须对应。

3.re_path正则匹配

re_path(正则表达式,函数名)
  • 匹配特性:
    一旦网址后缀的正则匹配到的内容就会自动执行后面的函数。
    并结束整个路由的匹配。
re_path('^text/$',views.test)

当网址不固定的时候可以使用转换器来匹配;

  • 正则匹配之无名分组
re_path('^text/(\d+)',view.text)

正则表达式匹配到的内容会当做视图函数的位置参数传递给视图函数。

  • 正则匹配之有名分租
re_path('^test/(?P<year>\d+)/(?P<others>.*?)/'views.test)

正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数

4.反向解析
概念:页面上提前写死了很多路由,一旦路由发生变化会导致所有页面的连接失效;为了防止出现问题,我们需要使用反向解析。
原理:返回一个结果,该结果可以访问到对应的路由。
用法:
(1)路由对应关系起别名

path('register/',views.reg,name='reg_view')

(2)使用反向解析语法

在html页面<a herf" ">中修改
{% url 'reg_view' %}

(3)后端

from django.shortcuts import reverse
reverse('reg_view')

5.无名有名反向解析

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

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

相关文章

Android专有GitHook完结篇,发布到npm

系列文章目录 Android打造专有hook&#xff0c;让不规范的代码扼杀在萌芽之中 Android打造专有hook第二篇&#xff0c;走进规范第一步 Android打造专有Hook第三篇&#xff0c;实战全量代码规范检查 Android打造专有Hook第四篇&#xff0c;实战增量代码规范检查 Hello啊各位…

【NLP】词向量

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

阿里巴巴面试题- - -多线程并发篇(三十)

前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位。为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司的Offer~~ 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elast…

窥一斑而知全豹,从五大厂商看MCU国产化的机遇和挑战

&#x1f446;&#x1f446;&#x1f446; #电巢直播10月26日&#xff08;周三&#xff09;扫码参与 前言 近年来&#xff0c;MCU在各领域的应用大幅度增加。2021年全球MCU的总出货量仍旧增长12%&#xff0c;使去年全球MCU的交付量达到了309亿片的历史新高。根据IC Insights…

工业控制系统安全评估流程系统评定与分类

综述 随着计算机和网络技术的发展&#xff0c;特别是信息化与工业化## 综述 随着计算机和网络技术的发展&#xff0c;特别是信息化与工业化深度融合以及物联网的快速发展&#xff0c;工业控制 系统产品越来越多地采用通用协议、通用硬件和通用软件&#xff0c;网络威胁正在由传…

Linux文件属性与权限

目录 前言 文件权限类 文件属性 rwx 作用文件和目录的不同解释 chmod 改变权限 1&#xff09;基本语法 2&#xff09;经验技巧 3&#xff09;案例实操 chown 改变所有者 1&#xff09;基本语法 2&#xff09;选项说明 3&#xff09;实操案例 chgrp 改变所属组 …

康为世纪科创板上市破发:跌幅超10% 公司市值41亿

雷递网 雷建平 10月25日江苏康为世纪生物科技股份有限公司&#xff08;简称&#xff1a;“康为世纪”&#xff0c;股票代码为“688426”&#xff09;今日在科创板上市。康为世纪此次发行价为48.98元&#xff0c;发行2329万股&#xff0c;募资总额为11.4亿元。康为世纪开盘价为4…

【单片机毕业设计】【mcuclub-jj-048】基于单片机的水表的设计

最近设计了一个项目基于单片机的水表系统&#xff0c;与大家分享一下&#xff1a; 一、基本介绍 项目名&#xff1a;水表 项目编号&#xff1a;mcuclub-jj-048 单片机类型&#xff1a;STC89C52 具体功能&#xff1a; 1、通过继电器控制水泵&#xff0c;将水抽出经过流速传感器…

Redis实战篇一 (短信登录)

Redis企业实战&#xff08;黑马点评&#xff09;项目整体架构项目部署后端部署前端部署短信登陆基于Session实现登录集群的Session共享问题基于Redis实现共享session登录解决状态登录刷新的问题——登录拦截器的优化本期学习路线短信登陆: Redis的共享session应用 商户查询缓存…

jar包突然过大解决方法,解决ffmpeg剪辑视频导致jar过大

jar包突然过大解决方法 缘由&#xff1a; ​ 项目中要需要用到视频文件&#xff0c;为了方便用户使用&#xff0c;那么页面中就需要增加视频剪辑的相关功能&#xff0c;让用户上传视频后能够自定义的进行剪辑&#xff0c;对自己的视频做出相应的更改 结果&#xff1a; ​ 打jar…

Vue复刻华为官网 (二)

文章目录1 推荐信息1.1 思路1.2 代码1.3 知识补充1.4 效果图2 宣传海报2.1 思路2.2 代码2.3 效果图3 新闻与活动3.1 思路3.2 代码3.3 效果图1 推荐信息 1.1 思路 看了这个gif后&#xff0c;可以清楚的看到产生了三个动画效果&#xff1a;图片"拉近"&#xff0c;"…

js 实现页面隐藏、关闭、刷新给出对应的提示

我们在做项目的时候经常会遇到一些需求&#xff0c;比如在某些页面当点击浏览器刷新 或者关闭的时候会有对应的提示&#xff0c;是否离开或者重新加载此网站。比如csdn写文章的时候就有这个弹窗&#xff0c;这功能就是用onbeforeunload实现的。 注意&#xff1a;如果你加载下面…

学会用Linux用户管理命令

目录 useradd 添加新用户 1&#xff09;基本语法 2&#xff09;案例实操 passwd 设置用户密码 1&#xff09;基本语法 id 查看用户是否存在 1&#xff09;基本语法 2&#xff09;案例实操 cat /etc/passwd 查看创建了哪些用户 1&#xff09;案例实操 su 切换用户 1…

Linux基本工具(上)

目录 粘滞位&#xff1a;t yum yum install yum list ​编辑 yum list | grep 软件名 yum search 软件名 软件卸载&#xff1a;yum remove rz sz表示下载&#xff1a; Linux开发工具&#xff1a; vim编辑器&#xff1a; vim的几种模式&#xff1a; 粘滞位&#xff1a…

蛇形矩阵求解

题目&#xff1a; 题解思考&#xff1a; 这个题目我有两种解题方法&#xff1a; 1&#xff09;利用数组&#xff0c;数组的下标。 2&#xff09;利用等差数列的规律&#xff08;这个可能比较难理解&#xff09;&#xff0c;行和列的递增规律。 注意输出格式的处理和多组输入…

三分钟带你手撕带头双向循环链表

数据结构——带头双向循环链表 &#x1f3d6;️专题&#xff1a;数据结构 &#x1f648;作者&#xff1a;暴躁小程序猿 ⛺简介&#xff1a;双非大二小菜鸟一枚&#xff0c;欢迎各位大佬指点~ 文章目录数据结构——带头双向循环链表前言一、什么是双向链表&#xff1f;二、带头…

图像智能处理黑科技,让图像处理信手拈来

图像智能处理黑科技&#xff0c;让图像处理信手拈来0. 前言1. 图像智能处理简介2. 图像切边增强3. PS 检测4. 图像水印去除5. 图像矫正6. 图像去屏幕纹7. 调用图像智能处理 API小结0. 前言 计算机视觉 (Computer Vision, CV) 通过研究如何令机器“看懂”世界&#xff0c;构建从…

嵌入式分享合集84

今天做的某地区的项目, 了解了一下 很是不开心 原来这几年丢的不仅是某公湖 真呵呵 一、学习单片机 如何系统地入门学习STM32&#xff1f; 假如你会使用8051 &#xff0c; 会写C语言&#xff0c;那么STM32本身并不需要刻意的学习。 你要考虑的是&#xff0c; 我可以用STM32实…

Scratch软件编程等级考试三级——20200913

Scratch软件编程等级考试三级——20200913理论单选题判断题实操幻影小猫打气球游戏猫咪抓老鼠游戏理论 单选题 1、要使以下代码运行后画出如图所示三角形风车&#xff0c;则以下代码中①②③④处应分别填入多少&#xff1f;&#xff08;&#xff09; A、3 4 90 120 B、4 3 90…

实验项目一:【文本反爬网站的分析和爬取】

一、实验目的 熟悉使用Selenium、Pyppeteer等工具爬取网站基本内容&#xff0c;通过分析具有文本反爬技术网站&#xff0c;设计爬取策略来获取文本正确的内容。 二、实验预习提示 安装Python环境 &#xff08;Python 3.x&#xff09;&#xff1a;Pychram社区版Anaconda为Pytho…