django新手教程

news2024/7/2 4:12:17

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()才能保存到数据库。

 

 

 

 

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

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

相关文章

【Python】高级语法:推导式、迭代器、生成器、装饰器

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、推导式1.列表推导式2.集合推导式3.字典推导式 二、迭代器三、生成器1.yield 生成器2.元组生成器3.生成器中重要方法 四、装饰器1.函数装饰…

谈谈电商API!

近年来,随着互联网和移动互联网技术的不断发展,电商行业成为了一种新兴的商业模式。电商平台实现了互联网和商品销售的深度融合,成为经济社会发展的重要组成部分。而电商API(Application Programming Interface, 应用程序接口&…

RobotFrameWork Web自动化测试之测试环境搭建

前言 Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD&#xff…

自然语言处理实战项目11-阅读理解项目的数据处理与训练详细讲解,实验结果与分析

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目11-阅读理解项目的数据处理与训练详细讲解,阅读理解任务目标是让计算机从给定的文章中理解并回答问题。为了完成这个任务,我们需要对给定的数据进行处理和训练。该任务是…

项目调研丨多区块并行处理公链 Transformers 研究报告

目录 一、项目简介 二、项目愿景 三、特色和优势 (1)速度 (2)安全 (3)可扩展性 (4)高度定制 (5)不可篡改 (6)所有数据公开透…

怎么防止数据重放攻击——CBC模式【密码学】(7)

目录 一、什么是CBC模式 二、初始化向量 三、异或运算 四、密钥少一位会有影响吗 一、什么是CBC模式 CBC模式中,明文分组在加密前,要与前一组的密文分组进行异或运算,异或运算的结果参与加密函数的运算。 每一个密文分组,都…

解决谷歌翻译无法使用

谷歌翻译无法使用是谷歌官方关闭了中国地区翻译服务。 废话不多说直接上教程,本质就是通过修改hosts文件让translate.googleapis.com域名的IP解析到国内的谷歌服务器IP,网上大部分的教程也是如此。 但是有个问题就是这个IP不稳定可能用了几天就不用了&am…

leetcode 150. 逆波兰表达式求值

2023.6.20 后缀表达式也是栈的经典应用&#xff0c;注意好细节就行&#xff0c;下面直接上代码&#xff1a; class Solution { public:int evalRPN(vector<string>& tokens) {stack<long long> stk;long long result 0;for(int i0; i<tokens.size(); i){i…

兼容性测试对于软件测试来说重要吗?

该测试是软件测试的一个重要部分&#xff0c;它也获得了越来越多的关注和重视。那么&#xff0c;兼容性测试对于软件测试来说重要吗&#xff1f;我们一起往下了解。 首先&#xff0c;兼容性测试可以确保软件在不同的操作系统、硬件平台和设备上能够正常运行。在产品开发过程中&…

Git进阶系列 | 2. Git中的分支策略

Git是最流行的代码版本控制系统&#xff0c;这一系列文章介绍了一些Git的高阶使用方式&#xff0c;从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章&#xff0c;这是第2篇。原文&#xff1a;Branching Strategies in Git[1] 几乎所有的版本控制系统(VCS)都有某种类型的…

【开发细节】SpringBoot项目将接口从HTTP换为HTTPS

证书准备 首先需要生成一个 SSL 证书&#xff0c;可以使用 OpenSSL 工具或者自己的 CA 颁发机构来生成证书&#xff0c;这里就不赘述了。如果是测试阶段&#xff0c;也可以使用 self-signed certificate。 直接使用jdk的keytool生成&#xff0c;具体操作方法如下&#xff1a; …

一个好看美观的登录注册界面的实现

序言&#xff1a;之前介绍那个博客&#xff0c;然后自己搞了这个界面。最近有人和我要&#xff0c;把代码给大家贴出来&#xff0c;提供参考。 首先是这个界面哈 <!DOCTYPE html> <html lang"en"> <head><script src"../static/lib/jquer…

不走弯路!记一个Appium框架运行的实例

目录 前言&#xff1a; 一、框架环境安装 二、测试流程操作 1、安装APK 2、启动 3、服务参数配置 4、脚本录制操作 5、脚本编写 6、脚本执行 三、测试总结 前言&#xff1a; Appium是一个开源的自动化测试框架&#xff0c;用于移动应用程序的自动化测试。它支持在iOS和Andro…

python:使用Scikit-image库的slic函数分割遥感图像

作者:CSDN @ _养乐多_ 本文记录了使用Scikit-image库的skimage.segmentation模块中的slic函数,进行超像素分割的代码。 文章目录 一、slic函数详解二、代码一、slic函数详解 在Scikit-image库的skimage.segmentation模块中,slic函数用于进行超像素分割。该函数的参数含义如…

62、基于51单片机手机APP蓝牙调试助手控制四个LED灯的开关系统设计(程序+原理图+PCB源文件+Proteus仿真+外文文献翻译+元器件清单等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…

CRM选型之CRM系统要不要自研

如今在外部激烈的竞争环境下&#xff0c;CRM因其具有有效管理客户资源&#xff0c;提升客户体验和满意度的能力&#xff0c;而逐渐成为了企业在运营中必不可收的一部分。然而&#xff0c;在引入CRM系统时&#xff0c;企业面临着选型难题&#xff1a;是自研还是购买第三方的CRM系…

Qt利用paintEvent绘制双Y轴坐标折线图

在项目中&#xff0c;根据需求需要开发双Y轴坐标折线图&#xff0c;但是由于它有多个图层&#xff0c;如果使用QChart绘制的话&#xff0c;达不到需求的要求&#xff0c;只能自己绘制&#xff0c;具体的利用translate()接口将坐标系统移动到界面的左下角(30, height() - 50)处&…

IDEA启动终端报错: Cannot open Local Terminal Failed to start ***

1.问题 打开IDEA后&#xff0c;启动终端发现终端报错没有办法正常使用&#xff0c;错误提示 Cannot open Local Terminal Failed to start [powershell.exe] in D:\vue_admin Error running process: CreateProcess failed. Code 2 See IDE log (Help | Show Log in Explorer…

开源创新,燃起未来的火花

尊敬的各位嘉宾、领导、专家、企业代表、优秀开发者和创新人才们&#xff1a; 在2023年6月11日至13日&#xff0c;开放原子全球开源峰会盛大召开&#xff0c;汇集了众多业界精英和开源领域的专家学者&#xff0c;为探索开源创新的辉煌未来共同助力。作为一名开源技术爱好者&am…

开放式耳机的优缺点有哪些?目前有什么开放式耳机推荐?

什么是开放式耳机&#xff1f; 从名字上理解就是开放样式的耳机&#xff0c;其实也确实如此&#xff0c;开放式耳机是不需要封闭耳道来传输声音&#xff0c;主要是通过耳骨振动传递或者声波震动耳膜&#xff0c;两者声音传递的方式都不用完全封闭耳道&#xff0c;可以让耳道对…