入门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
相关推荐
tatasix33 分钟前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。1 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了1 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度1 小时前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮1 小时前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9992 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️2 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
陈王卜2 小时前
django+boostrap实现发布博客权限控制
java·前端·django
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
苏-言3 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring