入门Django

news2024/11/19 12:38:58

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=1
    path('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.coloradmin.cn/o/2166362.html

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

相关文章

书生白嫖A100活动之——OpenCompass

内容来源&#xff1a;Tutorial/opencompass/readme.md at camp2 InternLM/Tutorial GitHub 概览 在 OpenCompass 中评估一个模型通常包括以下几个阶段&#xff1a;配置 -> 推理 -> 评估 -> 可视化。 配置&#xff1a;这是整个工作流的起点。您需要配置整个评估过…

HTML中的表单(超详细)

一、表单 1.语法 <!-- action&#xff1a;提交的地方 method&#xff1a;提交的方式&#xff08;get会显示&#xff0c;post不会&#xff09; --> <form action"#" method"get"><p>名字&#xff1a;<input name"name" ty…

【Geoserver使用】SRS处理选项

文章目录 前言一、Geoserver的三种SRS处理二、对Bounding Boxes计算的影响总结 前言 今天来看看Geoserver中发布图层时的坐标参考处理这一项。根据Geoserver官方文档&#xff0c;坐标参考系统 (CRS) 定义了地理参考空间数据与地球表面实际位置的关系。CRS 是更通用的模型&…

3. 轴指令(omron 机器自动化控制器)——>MC_MoveFeed

机器自动化控制器——第三章 轴指令 8 MC_MoveFeed变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 示例程序▶参数设定▶动作示例▶梯形图▶结构文本(ST) MC_MoveFeed 指定自外部输入的中断输入发生位置起的移动距…

2024免费录屏软件的宝藏功能与实用技巧

在手机上操作很多时候为了记录方便都直接截图或者录屏&#xff0c;其实电脑也一样。现在面向电脑的录屏工具纷繁复杂&#xff0c;很容易让我们挑花了眼。今天这篇文章我将介绍几款免费的录屏软件为大家提供参考。 1.福昕录屏大师 链接达达&#xff1a;www.foxitsoftware.cn/R…

深入探索 RUM 与全链路追踪:优化数字体验的利器

作者&#xff1a;梅光辉&#xff08;重彦&#xff09; 背景介绍 随着可观测技术的持续演进&#xff0c;多数企业已广泛采用 APM、Tracing 及 Logging 解决方案&#xff0c;以此强化业务监控能力&#xff0c;尤其在互联网行业&#xff0c;产品的体验直接关系着用户的口碑&…

使用Crawler实例进行网页内容抓取

网页内容抓取的背景 随着互联网的快速发展&#xff0c;网页上的信息量日益庞大。如何从海量的网页中快速、准确地抓取所需信息&#xff0c;成为了一个技术挑战。网页内容抓取技术通过自动化的方式&#xff0c;模拟用户浏览网页的过程&#xff0c;获取网页上的文本、图片、链接…

mybatisplus介绍以及使用(上)

目录 一、概念 1、什么是mybatisplus 2、为什么要使用mybatisplus 二、mybatisplus的使用 1、安装 2、常用注解 3、条件构造器 一、概念 1、什么是mybatisplus MyBatis-Plus&#xff08;简称MP&#xff09;是一个基于MyBatis的增强框架&#xff0c;旨在简化开发、提高…

学习C语言(20)

在这段没有更新的时间作者大一开学了&#xff0c;军训期间一直比较忙没时间学习&#xff0c;9月23号结束了为期十四天的军训&#xff0c;今天开始重新更学习C语言的博客 整理今天的学习内容 1.浮点数在内存中的储存 浮点数包括float&#xff0c;double&#xff0c;long doub…

vue实现左侧数据拖拽到右侧区域,且左侧数据保留且左侧数据不能互相拖拽改变顺序

一、案例效果 二、案例代码 封装左侧抽屉 DrawerSearch.vue <template><div><mtd-form :model"formDrawerSearch" ref"formCustom" inline><mtd-form-item><mtd-inputtype"text"v-model"formDrawerSearch.hos…

美团一面:给定两棵二叉树 `A` 和 `B`,判断 `B` 是否是 `A` 的子结构?

目录标题 问题描述思路分析代码解释详细步骤复杂度分析 问题描述 给定两棵二叉树 A 和 B&#xff0c;判断 B 是否是 A 的子结构。所谓子结构是指 B 中任意节点在 A 中存在相同的结构和节点值。 例子1&#xff1a; 输入&#xff1a;tree1 [1,7,5], tree2 [6,1] 输出&#…

LeaferJS 动画、状态、过渡、游戏框架

LeaferJS 现阶段依然专注于绘图、交互和图形编辑场景。我们引入游戏场景&#xff0c;只是希望让 LeaferJS 被更多有需要的人看到&#xff0c;以充分发挥它的价值 LeaferJS 为你带来了全新的游戏、动画、状态和过渡功能&#xff0c;助你实现那些年少时的游戏梦想。我们引入了丰富…

NVIDIA TAO 工具套件5.3.0学习介绍及操作-01

什么是 NVIDIA TAO 工具套件&#xff1f; NVIDIA TAO 工具套件基于 TensorFlow 和 PyTorch 构建&#xff0c;是 NVIDIA TAO 框架的低代码版本&#xff0c;通过抽象出 AI/深度学习框架的复杂性来加速模型训练过程。TAO 工具套件让您利用迁移学习的强大功能和自己的数据对预训练 …

Remotion:使用前端技术开发视频

前言 最近做文章突然想到很多文章其实也可以用视频的方式来展现&#xff0c;以现在短视频的火爆程度&#xff0c;肯定能让更多的人看到。 恰巧最近看了很多关于动画的前端 js 库&#xff0c;那如果将这些动画帧连续起来&#xff0c;岂不是就成了一个视频吗&#xff1f; 而且…

集成Elasticsearch到django restful

文章目录 集成ES到django restful服务端项目安装haystack基本使用安装配置索引模型ORM模型中新增discount_json字段方法全文索引字段模板 索引序列化器全文搜索的索引视图路由手动构建es索引 集成ES到django restful服务端项目 如果直接在Django项目直接编写代码作为ElasticSe…

YOLOv5白皮书-第Y2周:训练自己的数据集(云jupyter运行版 )

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](小团体&#xff5e;第八波) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](K同学啊-CSDN博客)** 目录 前言 一、.xml文件里保存的是什么 二、准备好自己的数据 三、创建split_tr…

spring boot 3 + 虚拟线程 + MDC traceId

虚拟线程&#xff08;Virtual Thread&#xff09;也称协程或纤程&#xff0c;是一种轻量级的线程实现&#xff0c;与传统的线程以及操作系统级别的线程&#xff08;也称为平台线程&#xff09;相比&#xff0c;它的创建开销更小、资源利用率更高&#xff0c;是 Java 并发编程领…

ChatGPT-4模型镜像站对比和【软件开发人员】提示词

AI如今很强大&#xff0c;聊聊天、写论文、搞翻译、写代码、写文案、审合同等等&#xff0c;ChatGPT 真是无所不能~ 作为一款出色的大语言模型&#xff0c;ChatGPT 实现了人类般的对话交流&#xff0c;最主要是能根据上下文进行互动。 接下来&#xff0c;我将介绍 ChatGPT 在…

活动|华院计算参与《数字生态指数2024》报告发布并受邀主题分享

9月20-21日&#xff0c;“第二届数字生态与治理论坛暨数字生态指数2024发布会”在湖北省武汉市举办。华院计算作为研究团队一员受邀出席论坛&#xff0c;并发表“人工智能赋能基层社会治理”主题演讲。 《数字生态指数2024》报告为国家对外积极调整全球数字治理战略定位&#x…

UE学习篇ContentExample解读------Blueprint_Communication-下

文章目录 总览描述批次阅览2.1 Using an Event Dispatcher function to call an event in the level Blueprint2.2 Binding an Event Dispatcher function to a custom event2.3 Binding an Event Dispathcer to a custom event on spawn3.1 Basic communication using a Bluep…