入门Django

Django

  • Django 简介
  • URL组成部分详解
  • 第一个Django项目
    • 创建一个Django项目
    • 运行Django项目
    • 项目结构介绍
    • project和app的关系
  • URL与视图函数的映射
  • URL的两种传参方式
    • 在URL中携带参数
  • path函数
    • url路由模块化
    • url反转

Django 简介

  • Django 是一个高级的 Python Web 框架,用于快速开发可维护和可扩展的 Web 应用程序。使用 Django,只要很少的代码,就可以轻松地完成一个正式网站所需要的大部分内容

  • Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式

    • 模型(Model): 编写程序应有的功能,负责业务对象与数据库的映射(ORM)
    • 视图(View): 图形界面,负责与用户的交互(页面)
    • 控制器(Controller): 负责转发请求,对请求进行处理
      在这里插入图片描述
  • 特点:

    • ORM(对象关系映射): Django 提供了一个强大的 ORM,允许开发者通过 Python 代码来定义和操作数据库模型,而无需直接使用 SQL。这使得数据库操作更加抽象和易于管理。
    • MVC 架构: Django 遵循 MVC(模型-视图-控制器)的软件设计模式。在 Django 中,模型(Model)表示数据结构,视图(View)负责呈现用户界面,而控制器(Controller)的职责被称为视图(View)。
    • 模板引擎: Django 使用模板引擎来生成 HTML,这使得前端和后端的代码分离更加容易。Django 的模板语言允许开发者在模板中嵌入动态内容。
    • 自动化 admin 界面: Django 自动生成管理后台,使得管理和操作数据库的过程变得非常简单。开发者可以轻松地创建、修改和删除数据库记录,而无需编写自定义的管理界面。

URL组成部分详解

URL是uniform Resource Locator的简写,统一资源定位符
一个URL由以下几部分组成:
在这里插入图片描述

  • scheme:代表的是访问的协议,一般为http或https以及ftp等
  • host:主机名,域名,比如www.baidu.com
  • port:端口号,http协议是80端口,https协议是443端口
  • path:查找路径。比如:www.baidu.com/trending/now,后面的trending/now就是path
  • query-string:查询字符串,用来传参。比如:www.baidu.com/s?wd=python&a=1,后面的wd=python和a=1就是查询字符串
  • anchor:锚点,后台一般不用管。前端用来做页面定位

第一个Django项目

创建一个Django项目

  • 一,用命令行的方式创建
    • 1.打开想要存放想要存放Django项目的文件夹
    • 2.在文件地址栏输入cmd,按回车键就可以在当前路径打开cmd命令窗口
      在这里插入图片描述
    • 3.在命令行中输入django-admin startproject startdjango
      在这里插入图片描述
    • 4.创建成功
      在这里插入图片描述
  • 二、用pycharm的方式:
    • 点击新建项目,选择Django,如图
      在这里插入图片描述

运行Django项目

  • 一、通过命令行的方式:
    • 1.进入创建好的Django文件夹中,在地址栏输入cmd进入命令提示符
    • 2.在命令提示符中输入 python manage.py runserver
      在这里插入图片描述
    • 3.在网页中输入http://127.0.0.1:8000/,显示下图即创建成功
      在这里插入图片描述
  • 二、通过Pycharm来运行
    • 1.进入urls.py中,点击运行
    • 2.点击运行框中的的地址
      在这里插入图片描述
      在这里插入图片描述

项目结构介绍

  • 1.manage.py:以后和项目交互基本上都是基于这个文件。一般情况下不编辑这个文件
    • 交互方法:在终端输入python.manage.py [子命令];如:可以输入python.manage.py help 看下能做什么事情
  • 2.setting.py:本项目的设置项,以后所有和项目相关的配置都是放在这个里面
  • 3.urls.py:这个文件是用来配置URL路由的。比如访问http://127.0.0.1/news/是访问新闻列表页,这些东西就需要在这个文件中完成
  • 4.wsgi.py:项目与WSGI协议兼容的web服务器入口,部署的时候需要用到的,一般情况下也是不需要修改的

project和app的关系

  • app是django项目的组成部分,一个app代表项目的一个模块,所有URL请求的响应都是由app来处理。
    比如豆瓣,里面由图书、电影、音乐等许许多多的模块。如果站在Django的角度来看,图书、电影、音乐这些模块就是app,他们共同组成豆瓣这个项目,因此这里有个概念:Django项目由许多app组成,一个app可以被用到其他项目,django也能拥有不同的app
  • 创建APP:通过命令 python manage.py startapp book
    在这里插入图片描述

URL与视图函数的映射

  • 1.在urls.py中创建一个index视图函数,返回响应的内容
  • 2.在urls.py的urlpatterns列表中添加path,映射到index函数中
    在这里插入图片描述
  • 3.如果setting.py中的DEBUG = True,则urls.py进行修改后,会自动运行urls.py。最终出现如图表示成功
    在这里插入图片描述
  • 4.如果想要添加path。如:添加方法为s,则需要在域名后添加方法s。才可以访问到视图
    在这里插入图片描述

在这里插入图片描述

URL的两种传参方式

在实际开发中,在urls.py中只会做一些映射,不会去写一些视图函数。视图函数通常会写在各个APP的view.py中。

在URL中携带参数

  • 1.通过查询字符串(query string):https://www.baidu.com/s?wd=python&a=1&b=2
    • 在APP的views.py中
# 1,查询字符串:http://127.0.0.1:8000/book?id=3
def book_detail_query_string(request):#request.GET = {"id":3}book_id = request.GET.get('id')name = request.GET.get('name')return HttpResponse(f"您查找的图书id是:{book_id},图书名称是:{name}")
    • 在urls.py中
urlpatterns = [#http://127.0.0.1:8000/book?id=1path('book',views.book_detail_query_string)]
  • 2.在path中携带:http://127.0.0.1:8000/book/2
    • 在APP的views.py中
# 2.在path中携带:http://127.0.0.1:8000/book/1
def book_detail_path(request,book_id):return HttpResponse(f"您查找的图书id是:{book_id}")
    • 在urls.py中
urlpatterns = [#http://127.0.0.1:8000/book/1#在book_id前指定参数类型有两点好处:#1,以后在浏览器中,如果book_id输入的是一个非整形,那么会出现404错误#2,在视图函数中,得到的book_id就是一个整形,否则默认是str类型path('book/<int:book_id>',views.book_detail_path)
]

path函数

path函数定义为:path(route,view,name=None,kwargs=None)。以下对这几个参数进行详解

  • 1,route参数:url的匹配规则。这个参数可以指定url中需要传递的参数,比如在访问文章详情页时,可以传递一个id。传递参数是通过<>尖括号来进行指定的。并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的id都是int类型,可以写为int:id那么以后匹配时,就只会匹配到id为int类型的url,而不会匹配其他的url。并且在视图函数中获取这个参数的时候,就已经被转换成一个int类型了。其他几种常用类型:
    • str:非空的字符串类型。默认的转换器,但是不能包含斜杠
    • int:匹配任意的零或正数的整形。到视图函数中就是一个int类型
    • slug:由英文中的斜杠 - ,或者下划线_连接英文字符或者数字而成的字符串
    • uuid:匹配uuid字符串
    • path:匹配非空的英文字符串,可以包括斜杠/
      • 示例代码:
      • 视图函数:
def book_int(request,book_id):return HttpResponse(f"您查找的图书id是:{book_id}")def book_str(request,book_id):return HttpResponse(f"您查找的图书id是:{book_id}")def book_slug(request,book_id):return HttpResponse(f"您查找的图书id是:{book_id}")def book_path(request,book_id):return HttpResponse(f"您查找的图书id是:{book_id}")
      • path函数:
urlpatterns = [path('admin/', admin.site.urls),# path('s', index),#https://127.0.0.1:8000/s#http://127.0.0.1:8000/book/1#在book_id前指定参数类型有两点好处:#1,以后在浏览器中,如果book_id输入的是一个非整形,那么会出现404错误#2,在视图函数中,得到的book_id就是一个整形,否则默认是str类型path('book/<int:book_id>',views.book_int),path('book/str/<str:book_id>',views.book_str),path('book/slug/<slug:book_id>',views.book_slug),path('book/path/<path:book_id>',views.book_path)
]
  • 2,view参数:可以为一个视图函数或者是类视图.as_view或者是django.urls.include()函数的返回值
  • 3,name参数:这个参数是给这个url取个名字,这在项目比较大,url比较多的时候用处很大

url路由模块化

  • 1,在对应APP的views.py中创建视图函数
from django.shortcuts import render,HttpResponse
def movie_list(request):return HttpResponse("电影列表")def movie_detail(request,movie_id):return HttpResponse(f"您获取的电影ID是:{movie_id}")
  • 2,在对应APP下面创建urls.py文件,将视图函数传入相应的模块下
from django.urls import path
from movie import views# 指定应用名称(应用命名空间)
app_name = 'movie'
urlpatterns = [path('list', views.movie_list, name='movie_list'),path('detail/<int:movie_id>', views.movie_detail, name='movie_detail'),
]
  • 3,回到主项目的urls.py中,导入include函数,传入相应app下的urls
from django.contrib import admin
from django.urls import path,include
from django.shortcuts import HttpResponse
urlpatterns = [path('admin/', admin.site.urls),path('movie/',include('movie.urls'))
]

url反转

  • 之前我们都是通过url来访问视图函数,如果我们想要反向知道这个视图函数,那么可以通过reverse反转回他的url来实现:
path('book',views.book_detail_query_string,name="book_detail_query_string")
>/book
  • 如果有应用命名空间或者有实例命名空间,那么应该在反转的时候加上命名空间:
print(reverse("movie:movie_list"))
>/movie/list
  • 如果这个url中需要传递参数,那么可以通过kwargs来传递参数:
print(reverse("book_str",kwargs={"book_id":1}))
>/book/str/1
  • 如果是查询字符串的方式传参,那么就只能通过字符串拼接的方式
print(reverse("book_detail_query_string")+"?id=1")
>/book?id=1

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

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

相关文章

握手传输 状态机序列检测(记忆科技笔试题)_2024年9月2日

发送模块循环发送0-7&#xff0c;在每个数据传输完成后&#xff0c;间隔5个clk&#xff0c;发送下一个 插入寄存器打拍处理&#xff0c;可以在不同的时钟周期内对信号进行同步&#xff0c;从而减少亚稳态的风险。 记忆科技笔试题&#xff1a;检测出11011在下一个时钟周期输出…

深度学习03-神经网络01-什么是神经网络?

神经网络的基本概念 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09;&#xff1a; 是一种模仿生物神经网络的计算模型。由多个神经元&#xff08;或称为节点&#xff09;组成&#xff0c;这些节点通过不同的连接来传递信息。 每个神经元可以接…

【Proteus51单片机仿真】PWM直流电机调速

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 ** 基于AT89C51&#xff0c;L298N驱动两个电机&#xff0c;因为是平台&#xff0c;最后用两个电机驱动&#xff0c;然后第一个按键控制所有电机停止&#xff0c;第二个按键按下&#xff0c…

华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域

场景介绍 华为地图的移动是通过模拟相机移动的方式实现的,您可以通过改变相机位置,来控制地图的可见区域,效果如图所示。 本章节将向您介绍相机的各个属性与含义,并移动相机。 相机移动前 接口…

计算机的错误计算(一百)

摘要 探讨 与 的计算精度问题。 从计算机的错误计算&#xff08;九十九&#xff09;知&#xff0c;运算 与 均被列在IEEE754-2019中。然而&#xff0c;似乎并没有哪种语言实现内置了第二个运算。 例1. 计算 与 不妨在Python 3.12.5 下计算&#xff0c;则有 然而&#…

黄酮类化合物及其衍生物生物合成的进展:构建酵母细胞工厂的系统策略-

Advances in Flavonoid and Derivative Biosynthesis: Systematic Strategies for the Construction of Yeast Cell FactoriesCli 黄酮类化合物及其衍生物生物合成的进展&#xff1a;构建酵母细胞工厂的系统策略 摘要 黄酮类化合物是一类重要的天然多酚化合物&#xff0c;具有…

Windows系统文件夹中的文件名排序

一天张三、李四的同事周五接到王哥的一个任务需求&#xff0c;有一个文件夹&#xff0c;里面有许多图片文件&#xff0c;网页访问某个分类展示文件的时候&#xff0c;王哥希望文件名的展示顺序可以按照Windows资源管理器中文件名升序排序的方式展示。 网站图片目录中有如下图片…

[Python学习日记-26] Python 中的文件操作

[Python学习日记-26] Python 中的文件操作 简介 操作模式 循环文件 其他功能 混合模式 修改文件 简介 在 Python 中的文件操作其实和我们平时使用的 Word 的操作是比较类似的&#xff0c;我们先说一下 Word 的操作流程&#xff0c;流程如下&#xff1a; 找到文件&#x…

鸿蒙开发项目中你是怎么理解生命周期?你知道的生命周期函数有那些, 说一下执行时机?(页面和自定义组件生命周期)

生命周期流程如下图所示&#xff0c;下图展示的是被Entry装饰的组件&#xff08;页面&#xff09;生命周期。 #一、怎么理解生命周期&#xff1f; 生命周期&#xff1a;简单点理解就是从创建到销毁的过程 #二、你知道的生命周期函数有那些, 说一下执行时机&#xff1f; 自定义…

前端框架的比较与选择详解

目录 引言 一、前端框架概述 1.1 什么是前端框架 1.2 为什么使用前端框架 二、主流前端框架比较 2.1 React 2.1.1 概述 2.1.2 特点 2.1.3 优点 2.1.4 缺点 2.1.5 适用场景 2.2 Angular 2.2.1 概述 2.2.2 特点 2.2.3 优点 2.2.4 缺点 2.2.5 适用场景 2.3 Vue.j…

石岩体育馆附近的免费停车场探寻

坐标&#xff1a;石岩体育馆侧的石清大道断头路, 如果运气好的话&#xff0c;遇到刚好有车开出的话&#xff0c;我觉得可以作为中长期的免费停车点 第一次路过的时候&#xff0c;把我震惊了&#xff0c;我一直以为石岩停车位紧张比市区还严重&#xff0c;因为石岩大部分为统建楼…

无人机视角电力巡检资产检测与异常判别数据集

无人机视角电力巡检资产检测与异常判别&#xff0c;资产检测关注17类目标&#xff0c;共10000余张无人机图像&#xff0c;json方式标注&#xff0c;类别如下&#xff1a; 1.Spiral Damper - 螺旋阻尼器 2.Stockbridge Damper - 斯托克布里奇阻尼器 3.Glass Insulator - 玻璃绝缘…

OpenStack Yoga版安装笔记(十三)neutron安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

【越学学糊涂的Linux系统】(1)Linux环境搭建|账户管理

Ⅰ. Linux环境&#xff1a; 0x00用什么去学习&#xff1a; Windows操作系统我们都不陌生&#xff0c;笔记本买过来了就装好了系统&#xff0c;现在我们要想使用Liunx操作系统该怎么办? ✨三种方法解决&#xff1a; ①直接安装在物理机上&#xff08;本电脑&#xff09;【❌…

上海市高等学校信息技术水平考试 C程序设计(2021A场)全解

2e-1 为 1.0^(-1)*2 在顺序查找法中&#xff0c;如果要从n个学生中找到某个特定的学生信息&#xff0c;最坏的情况是这个学生是最后一个被比较的&#xff0c;这时需要比较n次。但是&#xff0c;如果学生是均匀分布的&#xff0c;那么平均来说&#xff0c;你会在列表的中间找到这…

2024年最新Redis内存数据库主从复制、哨兵模式、集群部署等详细教程(更新中)

Centos 安装 Redis 检查安装 GCC 环境 [rootVM-4-17-centos ~]# gcc --version gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; no…

深入理解前端拖拽:从基础实现到事件冒泡与委托的应用【面试真题】

在前端开发中&#xff0c;拖拽功能是一项常见的交互需求。通过监听鼠标或触摸事件&#xff0c;用户可以拖动元素并将其放置到指定位置。理解拖拽的底层实现、如何判断拖拽的是子元素还是父元素&#xff0c;以及事件冒泡和事件委托的原理&#xff0c;可以帮助我们更好地实现复杂…

mybatis 和 mybatis-plus

mybatis 配置 1.新建MAVEN项目 2.配置mybatis依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

嵌入式面试学习笔记(入门1)

目录 指针的大小问题 sizeof和strlen C语言分配内存的方式 数组&#xff08;的&#xff09;指针和指针&#xff08;的&#xff09;数组 union 指针的大小问题 指针对于不少新手而言是一道难关&#xff0c;但是不必恐惧于指针。他的本质其实就是一个地址。请冷静下来仔细思…

人工智能开发实战辅助诊断应用解析

内容导读 项目分析预备知识项目实战 一、项目分析 1、提出问题 随着人们生活水平的提升和健康意识的增强&#xff0c;民众定期进行身体健康体检已成为常态&#xff0c;这种早期的疾病检测和筛查可以及早发现身体里已经出现的异常体征信息&#xff0c;做出正确诊断和有效处理…