入门Django

Django

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由以下几部分组成:

第一个Django项目

创建一个Django项目

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

运行Django项目

  • 一、通过命令行的方式:
    • 1.进入创建好的Django文件夹中,在地址栏输入cmd进入命令提示符
    • 2.在命令提示符中输入 python manage.py runserver
  • 二、通过Pycharm来运行
    • 1.进入urls.py中,点击运行
    • 2.点击运行框中的的地址

项目结构介绍

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中携带参数

java 复制代码
# 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中
java 复制代码
urlpatterns = [
	#http://127.0.0.1:8000/book?id=1
    path('book',views.book_detail_query_string)
    ]
java 复制代码
# 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中
java 复制代码
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:匹配非空的英文字符串,可以包括斜杠/
      • 示例代码:
      • 视图函数:
java 复制代码
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函数:
java 复制代码
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中创建视图函数
java 复制代码
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文件,将视图函数传入相应的模块下
java 复制代码
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
java 复制代码
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来实现:
java 复制代码
path('book',views.book_detail_query_string,name="book_detail_query_string")
>/book
  • 如果有应用命名空间或者有实例命名空间,那么应该在反转的时候加上命名空间:
java 复制代码
print(reverse("movie:movie_list"))
>/movie/list
  • 如果这个url中需要传递参数,那么可以通过kwargs来传递参数:
java 复制代码
print(reverse("book_str",kwargs={"book_id":1}))
>/book/str/1
  • 如果是查询字符串的方式传参,那么就只能通过字符串拼接的方式
java 复制代码
print(reverse("book_detail_query_string")+"?id=1")
>/book?id=1
相关推荐
莫叫石榴姐14 分钟前
一份热乎的阿里25届数据分析面试题
数据库·数据仓库·sql·算法·数据挖掘·数据分析
cong*28 分钟前
数据库提权【笔记总结】
数据库·笔记·adb
没明白白1 小时前
Redis 缓存雪崩、缓存穿透、缓存击穿详解
数据库·redis·缓存
gbase_lmax1 小时前
gbase8s数据库常见的索引扫描方式
数据库
阳光九叶草LXGZXJ2 小时前
南大通用数仓-GCDW-学习-03-用户管理
linux·运维·数据库·学习
jnrjian3 小时前
update 强制 NEST_LOOP NL 的理解,被驱动表 inner table
数据库·sql·oracle
新知图书3 小时前
SQL Server 2022的数据类型
数据库·oracle
脑子不好真君3 小时前
MongoDB的备份和恢复命令
数据库·mongodb
鲁鲁5174 小时前
梧桐数据库(WuTongDB):PostgreSQL 优化器简介
数据库·postgresql·梧桐数据库