入门Django

news/2024/9/22 13:24:47 标签: django, sqlite, 数据库

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.niftyadmin.cn/n/5670337.html

相关文章

windows@文件系统链接@快捷方式@快捷键方式和符号链接及其对比

文章目录 abstract快捷方式和符号链接的比较创建方式快捷方式的作用快捷方式的构成如何创建快捷方式快捷方式的管理快捷方式的高级用法快捷方式的命令行创建 对比&#x1f47a;快捷方式与符号链接的区别符号链接支持相对路径解析具体使用场景&#x1f47a;总结 abstract 快捷方…

SQL server学习01-SQL server环境配置

目录 一&#xff0c;手动下载及安装 microsoft .net framework 3.5 1&#xff0c;下载 2&#xff0c;安装 二&#xff0c;安装SQL server2014 1&#xff0c;下载 2&#xff0c;安装 3&#xff0c;启动SQL server服务 三&#xff0c;下载及安装Microsoft SQL Server…

Java安全(加密+HTTPS+WEB安全)

Java加密 单向加密 接收一段明文&#xff0c;然后以一种不可逆的方式将它转换成一段密文 ①、MD5&#xff0c;将无论多长的数据最后编码128位数据&#xff0c;常用文件校验、密码加密、散列数据 byte[] data ...;//明文数据 MessageDigest md5 MessageDigest.getInstance…

Linux之实战命令01:xargs应用实例(三十五)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

系统架构设计师 数据库篇

数据库 &#x1f4da; &#x1f310; 一个系统化的数据集合&#xff0c;它允许用户存储、检索和管理数据。数据库通常由表格组成&#xff0c;这些表格中存储了结构化的数据。每个表格由行&#xff08;记录&#xff09;和列&#xff08;字段&#xff09;组成&#xff0c;它们分…

在 Qt 中实现 `QListWidget` 列表项水平居中显示

文章目录 在 Qt 中实现 QListWidget 列表项水平居中显示引言QListWidget 和 QListWidgetItem水平居中的实现思路核心代码实现主窗口的设置添加列表项并设置文本居中样式表设置 运行效果可能遇到的问题总结参考文献 在 Qt 中实现 QListWidget 列表项水平居中显示 引言 Qt 是一…

glTF格式:WebGL应用的3D资产优化解决方案

摘要 glTF作为一种高效的3D资产格式&#xff0c;为WebGL、OpenGL ES和OpenGL运行时的应用提供了强有力的支持。它不仅简化了3D模型的传输与加载流程&#xff0c;还通过优化资产大小&#xff0c;使得打包、解包更加便捷。本文将深入探讨glTF格式的优势&#xff0c;并提供实用的代…

《C++中的神秘利器——类型萃取(Type Traits)深度解析》

在 C的浩瀚世界中&#xff0c;类型萃取&#xff08;Type Traits&#xff09;犹如一把神奇的钥匙&#xff0c;为开发者打开了高效编程的大门。那么&#xff0c;C中的类型萃取究竟有什么用呢&#xff1f;让我们一同深入探究。 一、类型萃取的基本概念 类型萃取从字面意思理解&a…