一、Django是什么
- Python下有许多不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。
- Django是一个开放源代码的Web应用框架,由Python写成。
- Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。
- Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。
二、Django 特点
强大的数据库功能
拥有强大的数据库操作接口(QuerySet API),如需要也能执行原生SQL。
自带强大后台
几行简单的代码就让你的网站拥有一个强大的后台,轻松管理内容!
优雅的网址
用正则匹配网址,传递到对应函数,随意定义,如你所想
模板系统
强大,易扩展的模板系统,设计简易,代码,样式分开设计,更容易管理。
**注:**前后端分离时,也可以用Django开发API,完全不用模板系统。
缓存系统
与Memcached, Redis等缓存系统联用,更出色的表现,更快的加载速度
国际化
完全支持多语言应用,允许你定义翻译的字符,轻松翻译成不同国家的语言。
三、Django 模型
- Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
- Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。
- MySQL 是 Web 应用中最常用的数据库
Django的抽象模型Models可以直接对数据库进行增删改查,不需要你自己写SQL语言来进行相关数据库操作,这里Django通过Models提供了一套完整的ORM框架来帮助我们执行对数据库数据的操作,因此,使用Django很容易完成对数据库的增删改查操作。
下面我们正式开始关于Django 的使用
1、Django 项目创建
使用pycharm创建一个Django 项目很简单,打开pycharm,File -> new Project ,通过下面的窗口创建即可,等待依赖的相关模块加载完毕即可,
当然,也可以通过命令行的方式,即django-admin进行创建,命令如下
django-admin startproject HelloWorld
创建完毕后,项目结构如图所示,
新创建的项目,有一个文件夹,和项目名称一样,我们从这个文件夹说起,大概说一下里面的几个文件的作用,
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互,比如启动Django项目时要执行的命令:python manage.py runserver
- init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- settings.py: 该 Django 项目的设置/配置,比如配置数据库连接信息等
- urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录",可以集中管理项目中的各个模块的路由信息
- wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
2、运行项目
其实上面的项目创建完毕后,就可以直接进行启动了,Django自带了服务器,但在生产环境下不适用这个自带的服务器,启动命令如下
python manage.py runserver
启动完毕,直接访问控制台的url:http://127.0.0.1:8000,不出意外可以看到欢迎页,
3、基本路由配置
Django中有一个很重要的模块就是路由,通过路由的统一管理和分发,控制客户端访问的路径,从而响应给客户端不同的信息,个人理解的主要有两种,返回数据,定向到不同的视图
直接返回数据,有点儿类似接口的行为,即客户端请求一个指定的接口,后台返回数据
返回数据并定向到视图,即后台返回数据并将定向到指定的html或其他模板页面,然后进行数据渲染
下面分别说说这两种方式,为使用方便,我们通过Django的命令行创建不同的模块,方便后续使用,这个有点儿类似于分包,比如实际业务中我们一个项目中有3个后台模块,就可以通过命令创建3个模块,然后再在各个不同的模块下编写自己模块的业务逻辑代码即可,
分别创建App模块,Student模块,Teachers模块
django-admin startapp App
django-admin startapp Student
django-admin startapp Teachers
创建完毕后,项目结构如图,可以看到,每个模块下均包含了一系列的配置文件,
我们先在App中进行,找到全局的路由配置入口,即在HelloDiango中,有一个urls.py的文件,这个配置文件管理着全局的路由配置,
简其主要的配置都在urlpatterns这个列表中,比如我们想访问某个接口路径怎们办呢?只需要在urls.py中引入某个模块的views即可,当然你的接口并不一定必须写在views里,也可以自定义一个.py文件,编写你对应模块的逻辑,这里假设先使用App模块里的views.py这个默认的文件,
首先在urls.py里导入views这个文件
from App import views
然后再在urlpatterns中使用path()函数定义浏览器访问的路径,比如我想通过访问:http://127.0.0.1:8000/hello得到数据,那么配置就是这样
path('hello/',views.hello)
而views.hello这个hello就是你需要在views.py中定义的方法,接下来就去看一下这个文件中代码的编写
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
#返回接口数据
def hello(request):
return HttpResponse("双击666")
如果是返回数据,只需通过HttpResponse包装你的数据即可,然后启动项目,访问一下,可以看到,接口数据成功返回
如果是视图的话,同样先在urlpatterns中添加一个path的路径配置,
path('miaIndex/',views.index),
然后去views.py中定义函数
#跳转视图页面
def index(request):
return render(request,'index.html')
要注意的是,这个index.html需要放在templates文件夹下,我们在这个文件夹下创建一个index.html页面,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MiaTest</title>
</head>
<body>
<h1>hi ,mia,the first python web application</h1>
<button id="first" onclick="displayData()">点我吧</button>
</body>
</html>
然后启动项目,进行访问,看到如下页面说明配置成功,
当然,我们也可以在接口中将数据和页面一起返回,然后在页面上渲染出来,这个留着后面详述
通过上面的基本的基本演示,我们完成了Django项目的简单搭建和路由的基本使用配置,并不难,主要是需要熟悉各个配置文件的使用
四、Django 操作数据库增删改查
有了上面的基础后,我们来说说使用Django 对mysql进行数据的增删改查操作,即上文提到的Model模型
在我们创建了一个Django 项目时,默认有一个db.sqllite3的文件,属于数据库的一种,但我们更多的使用的是mysql,因此在开始之前,需要安装一下mysql的连接驱动,直接在pycharm的终端下执行命令即可
pip install mysqlclient
安装完毕后,首先需要在settings.py中的DATABASES连接处进行本地数据库连接信息的配置,
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
'NAME': '数据库名称',
'USER': 'root',
'PASSWORD': '密码',
'HOST':'数据库IP地址',
'PORT':'3306',
}
}
为演示方便我提前创建了一个测试使用的数据库,
1、定义模型
在上文中,我们创建了不同的模块,比如App,Student,Teachers,对于于实际的业务来讲,就是不同的功能板块,这样做的目的很简单,方便项目的运维管理,Django规定,如果要使用模型,必须要创建一个app,即模块的名称,我们使用以下命令创建一个 App的 app,上文已经说到了,
django-admin startapp App
创建成功后的模块包括响应的配置文件,我们要操作数据库的相关代码就写到各自的模块中即可,假如我们要操作数据库的一张表,Django中要怎么做呢?首先需要在models.py中定义基本的属性啊,即类和数据库字段的映射啊
from django.db import models
# Create your models here.
class Student(models.Model):
s_name = models.CharField(max_length=16)
s_age = models.IntegerField(default=1)
比如说我们在Student中要操作一个Student相关的行为,这里有s_name 和s_age 两个字段,直接在类中声明即可,具体的意思大家可以参考相关资料
2、注册配置
以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
接下来在settings.py中找到INSTALLED_APPS这一项,如下:
3、生成表结构
执行下面的几行命令
python manage.py migrate # 创建表结构
python manage.py makemigrations Student# 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate Student# 创建表结构
执行完毕上述的几行命令后,再去刷新数据库,可以看到数据库已经生成了我们需要的表结构,至于其他的表,属于Django自带的,可以不用做过多理会
4、重新配置路由
实际使用中,为方便路由的模块化管理和统一管理,老司机建议我们最好在各个模块中定义自己的urls.py文件,然后再加入到全局的urls.py中,这个在不同的语言和框架中都有这个思想,既然如此,我们先在Student中添加一个urls.py的路由文件,操作本模块的所有url的配置都将写到这个文件中,
这里配置完了后,怎么被Django项目全局管理起来呢?只需要将它注册到全局的urls.py中即可,如下,
后续如果还有更多的模块要加进来,只需要按照上述的操作即可
5、编写Django操作mysql的增删改查
上面的准备工作都做完了,就可以使用Django的model堆数据库做基本的增删改查操作了,我们现在Student模块下创建一个student_db.py文件,代码在这个文件中编写,该模块做的urls.py配置代码如下,其实和全局的那个配置基本类似,只是放在了自己的模块下进行管理起来
from django.contrib import admin
from django.urls import path, include
from App.testdb import *
from App import views
from Student import *
urlpatterns = [
#path('admin/', admin.site.urls),
path('hello/',views.hello),
path('miaIndex/',views.index),
#基本增删改查操作
path('test_save/',test_save),
path('test_query/',test_query),
path('test_update/',test_update),
path('test_delete/',test_delete),
#student模块的操作
path('student/',include('Student.urls')),
]
1、数据添加
#数据添加
def test_save(request):
test1 = Student(s_name='邓肯',s_age=40)
test1.save()
return HttpResponse('数据添加成功')
运行项目后,再访问之前需要注意我们全局的配置是这样的,path(‘student/’,include(‘Student.urls’)),而在自己的模块下是这样的,url(‘test_save/’,test_save),因此浏览器的路径访问时要注意拼接完整,
http://127.0.0.1:8000/student/test_save/
然后看数据库是否添加成功?id在上面的Student类中没有加,Django会默认按照自增策略加进去
表中成功添加一条数据,
其他的修改,查询和删除就不再一一演示了,下面直接贴出代码,提供参考,
#获取数据
def test_query(request):
# 初始化
#查询所有的数据
list = Student.objects.all()
#查询单个数据
response2 = Student.objects.filter(id=1)
return HttpResponse(response2.get().s_name)
#修改数据
def test_update(request):
Student.objects.filter(id=1).update(s_name = '帕克')
return HttpResponse("修改成功")
#删除数据
def test_delete(request):
Student.objects.filter(id=1).delete()
return HttpResponse("删除成功")
简单总结一下,本文通过pycharm创建Django项目,并简单演示了Django下的路由基本配置,创建不同模块的命令,最后演示了一下使用Django的Model对mysql进行增删改查操作,由于是学习使用,内容并不深,希望对后面的学习提供参考和帮助,最后感谢观看!
转载:https://blog.csdn.net/zhangcongyi420/article/details/102313888