django新手教程

Django简介

Django是开源的、大而且全的Web应用框架。

它独具特色,采用了MTV设计模式

它也是一款用来构建服务器的框架。这一概念如何理解呢?

应用程序有两种模式:C/S、B/S。

C/S是客户端与服务器端,这类程序一般能独立运行。

B/S是浏览器端和服务器端应用程序,这类应用程序一般要借助谷歌、火狐等浏览器来运行。

Web应用程序一般用B/S模式。

在网络编程的意义下,浏览器是一个socket客户端,服务器是一个socket服务端。而Django正是这样一种用来构建服务器的框架。

Django的设计模式介绍

Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。

Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

       Model(模型):负责业务对象与数据库的对象(ORM)

       Template(模版):负责如何把页面展示给用户

       View(视图):负责业务逻辑,并在适当的时候调用Model和Template

此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

Django框架的优点

强大的数据库功能

用 python 的类继承,几行代码就可以拥有一个丰富、动态的数据库操作接口(API),如果需要,你也能执行 SQL 语句ORM(Object-Relational Mapping“对象-关系-映射”),它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。

自带强大的后台功能

在admin.py中写入几行简单实现功能代码就能实现管理员的权限。

优雅的网址

在urls.py中用正则匹配网址,传递到对应的函数,更加简单的编写路由。

具有模板系统

模板系统设计简单,易扩展。代码、样式分开设计,有助于查找和修改。

高效的缓存系统

Django和memcached、redis或者其他的缓存系统可联用,页面加载速度提升。

 

安装pip

pip是Python的包管理工具。使用它可方便下载各种Python的插件库。

如果电脑中没有pip可点击:pip · PyPI

下载最新的pip压缩包并进行解压,进入解压的目录。

在目录上方输入cmd然后回车进入命令行。

执行安装命令,在命令行输入:

python setup.py install

pip安装Django

安装

通过pip安装Django。

在cmd命令行中输入下面代码,然后回车进行下载安装。

pip install Django==2.2.6  -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

其中2.2.6为版本号,-i和后面是表示使用国内镜像进行下载。

验证安装成功

在cmd命令行中输入

pip list

然后回车,查看列表的版本为2.2.6的Django,则安装成功。

配置环境变量

我们需要将Django配置进环境变量,才可以使用django-admin命令(后续会使用到)

首先我们要找到Django的安装位置,可能的安装位置有如下两处:

C:\Users\Administrator\AppData\Roaming\Python\Python310\Scripts​(因每个人使用的Windows用户不一样,administrator也有可能是其他内容。python310为小编安装的python版本号,不同版本有所区别)

或者​C:\Program Files\Python310\Scripts​(python310同上)

在该文件夹下有一个django-admin.py  或 django-admin.exe 文件,有该文件的文件夹为django的安装位置,将这个安装位置(是一个文件夹路径)配置到环境变量中:

环境变量的配置方式:右键我的电脑->属性->高级系统设置->环境变量->系统变量->path变量

pip卸载Django

如需卸载当前版本的Django,那么需要在命令行输入命令:

pip uninstall django

如果要更换Django版本,需要先卸载当前版本,然后再下载新版本。

创建一个Django项目

创建一个名为project的Django项目,在cmd命令行输入

django-admin startproject project

输入命令完会生成一个名叫project的项目包,包内一个manage.py文件和项目名同名的project包。

  • manage.py文件: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。

project包里面我们可以查看到的目录结构:

  • project/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • project/settings.py: 该 Django 项目的设置/配置。
  • project/urls.py: 该 Django 项目的 URL 声明; 这是项目的根路由
  • project/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目

settings.py项目配置文件

创建完项目后,在项目同名的project目录内有一个settings.py 文件,这个配置文件用于配置和管理Django项目的运维信息。

settings.py配置文件中的所有配置项都是大写的,项目创建时,就初始化了一些默认配置,这些默认配置承载着最基础的项目信息。

其中常用的配置项有:

    DATABASES :数据库配置

    TEMPLATES:配置HTML页面的模板地址templates

    STATICFILES_DIRS :配置静态文件

    MIDDLEWARE :配置中间件

    DEBUG:默认为True,项目上线时改为False

    ALLOWED_HOSTS:限定请求中的host值

urls.py路由系统

Django的路由系统作用是使views中处理数据的函数与请求的url建立映射关系。

请求到来之后,根据urls.py里的关系条目,查找到与请求对应的处理方法,从而返回数据给客户端http页面。

在Django1.x版本中url映射一般是一条正则表达式,“^” 字符串的开始,“$“ 字符串的结束。项条目从头开始进行逐一对比,一旦遇到匹配项,立即执行该条目映射的视图函数或二级路由,其后的条目将不再继续匹配。因此,url路由的编写顺序至关重要!

在Django1.x中,一个url映射条目至少有两个参数,一个是正则规则,一个是视图函数,代码如下:

from django.conf.urls import url  # url()方法导入方式
url(r'^test/$',views.test)    # django2中使用re_path替换url

在Django2.x版本中路由映射使用 path() 或 re_path() 方法,path()没有了正则的那些规则,直接匹配字符串,re_patah() 用法和url()一样,path()的运用如下:

from django.urls import path,re_path    # path()方法的导入方式
path('test/',views.test)        # 不需要使用 ^ $ 等正则规则

注意:本课程中使用re_path()的正则匹配,可自行选择path()或re_path()。

当有多个应用(App)时,我们会在每个App里,各自创建一个urls.py路由模块,然后从根路由出发,将app所属的url请求,全部转发到相应的urls.py模块中。

用于开发的简易服务器

让我们来确认一下你的 Django 项目是否真的创建成功了。

下面将运行服务,访问这个项目。

如果你的当前目录不是外层的project目录的话,请切换到此目录,然后运行下面的命令:

python manage.py  runserver  8000

其中:

  • 8000为Django默认监听端口,可以省略。
  • 如果要使用其他端口可以将8000替换。
  • 在windows下Python可以简写为py。

这时,我们可以看见:‘https://127.0.0.1:8000/’,它表示服务器成功运行。

在浏览器访问‘https://127.0.0.1:8000/’,你将会看到如下页面。

127.0.0.1表示在本机访问,可以用localhost替代。

注意:不要关闭cmd窗口,否则服务器也将关闭。

创建一个应用

创建一个名为firstApp的应用,要先进入项目目录下,在cmd命令行输入

python manage.py startapp firstApp

project项目目录下如果出现一个名为firstApp包,则说明应用创建成功。

可以在项目所在路径命令行输入‘tree /F’查看目录层级,此时整个项目的目录层级为:

 

注册应用

新创建的应用要进行注册才可以用。

把我们新定义的firstApp加到项目同名目录下的settings.py中的INSTALL_APPS中。把应用的名称写入 ,记得用引号包裹,逗号隔开。

 

什么是视图?

MTV中的V表示的是View,视图函数(或简称视图)只是一个Python函数,它接受Web请求并返回Web响应。

此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像。视图本身包含返回该响应所需的任何任意逻辑。

该代码可以存在于你想要的任何地方,只要它在Python路径上即可。

为了将代码放在某处,惯例是将视图放在一个名为views.py的文件中,该文件位于项目或应用程序目录中。

编写第一个视图

打开 firstApp/view.py,把下面这些 Python 代码输入进去:

from django.http import HttpResponse    
def index(request):    
    return HttpResponse("Hello, world !")

其中,request参数是用来接收请求报文的,导入HttpResponse对象,用来向客户端返回数据。

如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。

为了创建 URLconf,请在firstApp目录里新建一个 urls.py 文件。

路由的使用

firstApp/urls.py(没有这个文件就在应用目录下创建urls.py文件,这是子路由)中,输入如下代码:

#子路由
from django.urls import path,re_path
from firstApp import views

urlpatterns = [
    re_path('', views.index, name='index'),    # re_path可以使用正则匹配视图,相当于Django1版本的url
    #...  其他的路由规则
]

下一步是要在根 URLconf 文件中指定我们创建的firstApp模块。在project/urls.py (根路由)文件的 urlpatterns列表里插入一个 include(),添加分路由,把我们自己创建的urls.py与根路由关联,代码如下:

#根路由
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),    # path匹配的是字符串
    path('', include(('firstApp.urls','app'),namespace='app')),    # namespace是命名空间
    #...  其他的路由规则
]

函数 include( )允许引用其它 URLconfs。每当Django遇到include()(来自django.conf.urls.include())时,它会去掉URL中匹配的部分并将剩下的字符串发送给include的URLconf做进一步处理,也就是转发到二级路由去。

此时用你的浏览器访问 http://localhost:8000,你将能够看见 "Hello, world!" ,这是你在index视图中定义的。

 

Django1.x 与Django2.x中url与path的区别

Django2.x版本

Django2.x中的路由匹配视图官方推荐用path,path不支持正则匹配,直接匹配相同字符串。与url相比要去掉r、^和$等正则匹配。

#在使用namespace时需要在include中加入app_name,也就是下面的firstApp

#根路由
from django.contrib import admin
from django.urls import path,include,re_path    # path的导入方式

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(('firstApp.urls','firstApp'),namespace='firstApp')),

Django1.x 版本

Django1.x 中路由匹配视图使用url,使用正则匹配。在Django2.x中可使用re_path替换url,其他不变。

#在使用namespace时不需要加入app_name

#根路由
from django.conf.urls import url,include    # url导入方式
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^',include(('firstApp.urls'),namespace="firstApp")),
]

在本教程中路由统一采用re_path正则匹配的方式。

什么是模型?

模型(Model)是MTV中的M。模型一般在应用目录下的models.py进行操作。

模型是数据唯一而且准确的信息来源。它包含你正在储存的数据的重要字段和行为。一般来说,每一个模型都映射一个数据库表。

记住:

  • 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
  • 模型类的每个属性都相当于一个数据库的字段。

综上所述,Django 将给你一个自动生成访问数据库的 API。

web项目的数据一般都存在数据库(database)中,模型与数据库的交互是通过ORM完成。

 

ORM

ORM是“对象-关系-映射”的简称。

它是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。

ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。这使软件开发人员专注于业务逻辑的处理,提高了开发效率。

 

创建模型

现在我们定义一个名为Person的样例模型,并且有first_name和last_name属性。

在应用目录下firstApp/models.py中输入:

from django.db import models
class Person(models.Model):
    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=30)
    class Meta:
        db_table="person"

其中类名首字母应当大写。模型继承django.db.models.Model。

first_name 和  last_name是模型的字段。

每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。

CharField表示定义的字段类型为字符串。

max_length表示字段的最大长度。

db_table='person’是定义模型类在数据库中生成的表单的名字。

以上的 Person 模型能创建一个数据库表,如下:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

数据库的配置

通常,这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。

Python 内置 SQLite,所以你无需安装额外东西来使用它。

本课程使用的是MySQL数据库,如果使用默认数据库无需进行下面更改。

用pip安装mysqlclient,mysqlclient是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。

pip install mysqlclient

注意:在Django2中使用pymysql可以会版本报错,所以最好使用mysqlclient。

安装完,打开 project/setttings.py这是个包含了 Django 项目设置的 Python 模块。找到DATABASES对其进行配置。

其中MySQL的默认端口号为3306,如果是本机的数据库,HOST填入:127.0.0.1。

如此操作,数据库的基本配置就完成了。

数据迁移

 创建完模型后,我们需要找到项目目录(manage.py所在的目录),生成一个迁移文件,在命令行输入:

python manage.py makemigrations

生成迁移文件之后,执行迁移文件,请使用下面的指令:

python manage.py migrate

执行完迁移,数据库中会根据模型中类和属性生成对应的表。

 

模型属性(objects)

objects是类的一个属性。

objects是Manager类型的对象,用于与数据库进行交互,称之为管理器对象。

当定义的模型没有指定管理器对象,系统会默认创建一个名为objects的属性作为管理器对象。

objects也可自定义:

首先,自定义一个继承models.Manager的管理类,代码中重写get_queryset方法对数据进行了过滤。代码如下:

class StudentManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(isDelete=False)

然后,自定义管理器对象:

books=StudentManager()

一旦自定义管理器对象,默认的objects就不再自动生成。可以用自定义的管理器对象替它。

objects一般是通过‘类名.objects ’的方法使用

创建对象

创建对象就是根据模型中定义的类创建一个实例对象,这个对象拥有实际的属性值。

当创建对象时,Django不会与数据库进行交互,调用save()方法时才与数据库进行交互,将对象保存到数据库中。

创建对象的方法有多种,最简单的方法是在类中自定义一个类方法创建对象。定义一个create类方法具体代码如下:

class Student(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    @classmethod    #类方法
    def create(cls, name, age):
        return cls(name=name,age=age)
    class Meta:
        db_table="student"

类方法的定义要在函数的上方添加@classmethod,类方法把类当做第一个参数传给cls,后面的参数就是类的属性的形参,最后返回的把参数赋值给类属性。

创建对象一般在视图函数中,利用类方法创建一个名为小明,年龄为10的实例对象,代码如下:

name="小明"
age="10"
s3 = Student.create(name,age)
s3.save()

执行save()才能保存到数据库。

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搭建环境【2】windows主机和ubuntu互传文件的4种方法

我的ubuntu系统是安装在 VMware 虚拟机中的,两者之间经常要互传文件,下面介绍4种常用的互传文件方法。 1. 共享文件夹方式互传 在虚拟机中需要开启共享文件夹的功能。首先虚拟机中的ubuntu要求是已经开机了的状态,然后进行设置:…

浅谈【AI、算力赋能】“大算力”时代的到来

🔻一、【💣 话题引入:“AI算力最强龙头”,你怎么看?】 🙈 AI人工智能是否可以取代人类?    🙈 应不应该限制人工智能的发展?      🙈 AI研究及龙头行业迎…

【ARM AMBA AXI 入门 9 - AXI 总线 AxPROT 与安全之间的关系 】

文章目录 介绍ARM Trustzone的安全扩展简介 1.1 AXI AxPROT 介绍1.1.1 AXI 对 Trustzone的支持 介绍 ARMv8 架构中的AXI(Advanced eXtensible Interface)总线与NS(Non-Secure)位密切相关。NS位是指在ARM TrustZone安全扩展中定义…

养老院人员跌倒检测识别算法

养老院人员跌倒检测识别预警系统通过yolov5python网络模型技术,养老院人员跌倒检测识别预警算法对跌倒事件进行识别和分析,当检测到有人员跌倒时,将自动发出警报提示相关人员及时采取措施。YOLOv5是一种单阶段目标检测算法,该算法…

ASP.NET Core MVC 从入门到精通之日志管理

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

归一化详细推导

1. 一组数减去平均数的差的和为0。 一组数:a1,a2,a3,……,an, 平均数:a=(a1+a2+……+an)/n, 则 a1+a2+……+an=n*a, 从而,每一个数减去平均数的差的和为 (a1-a)+(a2-a)+……+(an-a) =(a1+a2+……+an)-n*a =0 2. 设原始数据均值及标准差为,将原始数组经过变换后得到使得均…

【好书精读】网络是怎样连接的 向 DNS 服务器查询 Web 服务器的 IP 地址

(该图由AI制作 学习AI绘图 联系我) 目录 IP 地址的基本知识 实际的 IP 地址 域名和 IP 地址并用的理由 Socket 库提供查询 IP 地址的功能 通过解析器向 DNS 服务器发出查询 解析器的内部原理 IP 地址的基本知识 生成 HTTP 消息 根据域名查询 …

C++笔记之extern关键字

C笔记之extern关键字 code review! 文章目录 C笔记之extern关键字0.前言1.extern是C语言的关键字还是C中的关键字?2.extern关键字和全局变量3.ChatGpt讲述extern的用法4.extern一般用法4.1.在本模块中使用4.2.跨模块中使用 5.标准定义使用extern关键字的步骤7.ext…

相机模型概述

相机模型 如图:假设P是现实世界中的一个点,P是三维世界中的点 Pr(Xr,Yr,Zr) 光心O视作摄像头 Pc(Xc,Yc,Zc) 在相机平面中,Pc的坐标为(0,0,0) 在物理成像平面 Pp(Xp,Yp,0) 在像素平面 P(Xp,Yp,0) 但是!!! 到了像素平面,坐标就不一样了,像素平面坐标顶点(最左上角)才是…

基于java,springboot的音乐分享平台

背景 音乐网站与分享平台的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、音乐资讯管理、音乐翻唱管理、在线听歌管理、留言板管理、系统管理,用户:首页、个人中心、音乐翻唱管理、我的收藏管理&…

SpringBoot+MyBatisplus搭建校园新闻平台——已开源

概述 开发背景 校园新闻平台是以新闻宣传机构的在线信息发布需求为基础,随着数字化和信息化的快速发展,校园新闻在校园内的传播和沟通中变得越来越重要。学校需要一个有效的管理系统来整合、发布和传播校园新闻,以满足师生、校友和其他利益…

WSL2安装Ubuntu及一些问题

文章目录 安装wsl2设置wsl版本安装Linux发行版问题问题1问题2 迁移导出注销原系统导入 windows和linux互传文件解决raw.githubusercontent.com无法访问的问题 安装wsl2 安装条件 内部版本 19041 及以上 (win10 2004以上或者win11) 查看方法:按 Windows健 R -->…

undetected_chromedriver解决网页被检测

一、问题分析 selenium打开浏览器模仿人工操作是诸多爬虫工作者最万能的网页数据获取方式,但是在做自动化爬虫时,经常被检测到是selenium驱动。比如前段时间selenium打开维普高级搜索时得到的页面是空白页,懂车帝对selenium反爬也很厉害。 二…

武职302303笔记-day02

这里写自定义目录标题 知识回归使用网页三剑客:HTML5CSS3(lass,sass)JavaScript(TypeScript)-VueVite/reactwebpack开发环境 利用最前沿前端开发技术实现网站开发VueVitepnpm构建项目验证环境安装Vue脚手架Vite(行业最…

NLP——Summarization

文章目录 Extractive summarisationSingle-documentcontent selectionTFIDF MethodLog Likelihood Ratio Method对数似然比Sentence Centrality Method 句子中心法 RST Parsing Multi-documentContent selectionMaximum Marginal Relevance 最大边际相关性Information Ordering…

STM32F4_触摸屏

目录 1. 触摸屏原理 2. 电阻式触摸屏检测原理 3. 电容式触摸屏检测原理 4. 硬件配置 4.1 XPT2046驱动芯片 4.2 硬件设计 5. 代码详解 5.1 main.c 5.2 AT24C02.c 5.3 AT24C02.h 5.4 C_Touch_I2C.c 5.5 C_Touch_I2C.h 5.6 Touch.c 5.7 Touch.h 5.8 FT5206.c 5.9 …

【Linux】timerfd——定时器

文章目录 前言认识 timerfdAPI timerfdAPI clock 官方示例简单使用epoll实现 前言 在 Linux 系统编程中,使用 timerfd 实现定时器功能是一种更加可靠、高效、灵活的方式。本文是对 timerfd 的简单使用,不涉及太过深入知识,熟练掌握几个常用 …

DOCker安装(一)

DOCker的安装 1、简介 Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。 Docker容器通过Docker镜像来创建。 容器之间互不干扰 容器与镜像的关系类似于面向对象编程中的对象与类。 对象->容器 镜像->类 通过镜像来创建容器 …

从Web2.0走向Web3.0还有多远?

Web2.0时代给互联网带来了巨大的变革,让用户成为内容的创造者和共享者。然而,随着技术的不断发展和创新,我们正在逐渐迈向Web3.0时代,这将是一个更加去中心化、透明和安全的数字世界。那么,从Web2.0走向Web3.0还有多远…

PHP基础知识解析:探索PHP编程的核心概念和技巧

目录 PHP简介 什么是PHP 网站基本概念 网站 静态网站特点 动态网站特点 服务器概念 IP 域名 DNS 端口 PHP基础知识 PHP语法 PHP注释 PHP语句分隔符 变量 变量基本概念 变量的使用 命名的命名规则: 预定义变量: 可变变量 变量传值 …