python中基于django库的后端开发(从零开始搭建一个项目)(django入门学习笔记2)(项目实操)

前言:

在入门学习笔记1当中,我们已经学会了django的基本结构,也就是MVT,本期的学习笔记,将从需求分析开始,让我们一起部署一个新的项目。

项目开发第一步——确定需求

在一个项目的新生时期,首先要知道我们想做的是什么事情,我们本次计划开发一个图书管理系统的增删改查的项目,那么我们的第一步就是建造数据库,所以我们要先对我们的项目进行结构分析:一个图书管理系统,首先它该有一个图书库,还应该有一个作者库,哪些书是属于同一个作者的,到此,分析基本结束。但是这只是非常浅显的,如果这个要作为生产项目,那么还需要有读者记录库,图书变更记录等等很多东西,我们这里仅仅采用图书库和作者库。

确定需求后——新建项目

在项目中,我们要用到MySQL数据库和APIfox这款软件,连接数据库的方法有很多种,这里笔者用Navicat Premium 15,这款软件博客上有安装教程,有15天的使用,配置环境这些均不赘述,下面开始在pycharm里面新建项目。 

挨个来,第一个Name,就是你项目的名称,采用驼峰法命名(学习笔记1里有详细介绍),然后选择一个本地路径,最好不要有中文(但是影响不会很大,只有某些极端情况下会有很大影响,其他时候与正常时候无异,除非企业要求比如内部使用,内部公开,不然最好不用,因为你一旦遇到某个极端情况,头都大了) ,选择一个安装好django库的虚拟环境点击creat,让我们开始吧!

在创建后,我们看到自动生成了一些.py的文件,这里的LibraryManagementSystem下还有一个 LibraryManagementSystem,

这里的第一个 LibraryManagementSystem就是我们创建的项目名称,它路径下的LibraryManagementSystem是指项目的主应用,所有和项目有关的关键配置,路由配置都是在这里面。

这里说下templats,相信各位同学已经猜到了,这个就是MVT中的T,也就是模板。我们之前说的前端传回的内容,前端就是客户或者你能看到页面,数据的处理是后端的工作。django下面的这个模板,是我们可以在里面放置页面的模板,然后可以直接调用模板来展示一些东西到前端。

本地网络配置

我们继续往下,假设我后面创建了一条路径: http://192.168.160.1:8022/book_add/      ,   这里的192.168.160.1是本地主机,8022是端口号,是我们自己可以设置的,设置的方式如下:

第一步,先找到我们自己的本机ip地址:win+r打开运行命令输入cmd

第二步:输入ipconfig

获得IPv4地址!

然后回到django项目里继续操作,在右上角找到这个文件配置,我们可以自己设定主机地址和端口号

 默认端口号是8000(但是最好不要用,某些极端情况下要出bug)

这里假设设定为192.168.160.1:8022,你要设定成你自己的本机地址加随意端口号,这个没什么大影响。

子应用创建

然后打开终端 输入神秘代码 

python manage.py startapp experiment

然后发现闪了一下没有其他的东西,这就说明做对了,代码的意思是说,manage.py是django下自带的一个文件,里面有很多封装好的方法,startapp就是其中一种,意思是新建一个子应用,子应用命名它为 experiment,这里我失误了,子应用也该用驼峰法来命名,但是实验的话就将就用吧。

主应用配置

发现目录下多了一个文件夹,就是我们刚刚创建的子应用,我们先去给他注册一下,找到主应用的setting.py,找到这个:

把我们注册好的应用名增加进去,这个INSTALLED_APPS就是注册在里面的app,我们可以使用。到这里还没有完,我们还要设置一些东西 ,往上滑找到ALLOWED_HOSTS

 在里面添加进去"*",它的意思是允许访问你服务器的ip有哪些"*"可以接受来自所有ip的访问,后面如果是企业的生产还要配置解决一个跨域的问题,这里暂时不需要,然后我们继续往下走,找到

这里代码的意思是默认使用一个数据库,这个库是django下自带的数据库:

这里我们不用它,我们改掉,如下代码:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "library_management_system",
        "USER":"root",
        "PASSWORD":"111111",
        "HOST":"127.0.0.1",
        "PORT":"3306",
    }
}

这里内容有点多,我们一条一条说,首先这里是设置默认的数据库,后面如果项目比较复杂还可以添加多个数据库,

ENGINE要把sqlite3改为mysql!!!相当于把引擎从自带的库切换为sql的库!

USER就是你在创建数据库时设置的名字,密码也是,

 HOST是指你SQL服务连接的HOST,端口号也是,这些设置都是在创建sql服务的时候。

这里我们先打开Navicat Premium 15,用它连上本地的SQL服务,创建一个名为library_management_system的数据库,

这里面是没有内容的,然后到这里网络的注册就结束了。

回到我们子应用的__init__.py,这里也要同步添加,注意不要加在主应用下了!

import pymysql
pymysql.install_as_MySQLdb()

数据表的创建

然后就可以开始我们学习笔记的第一步,建库了,以下代码的每一项内容在学习笔记1里均有解释,这里直接使用

class Book(models.Model):
    book_name = models.CharField(verbose_name='图书名称', max_length=64, unique=False, null=True, blank=True)
    book_author = models.CharField(verbose_name='图书作者', max_length=32, unique=False, null=True, blank=True)
    book_type = models.CharField(verbose_name='图书类型', max_length=32, unique=False, null=False, blank=False)
    book_SSIN = models.IntegerField(verbose_name='图书编码', unique=True, null=False, blank=False)

    class Meta:
        verbose_name_plural = '图书'
        db_table = 'book'

class Author(models.Model):
    book_id = models.CharField(verbose_name='图书对应id', max_length=32, unique=False, null=True, blank=True)
    author_name = models.CharField(verbose_name='作者名字', max_length=32, unique=False, null=True, blank=True)
    author_age = models.CharField(verbose_name='作者年龄', max_length=32, unique=False, null=True, blank=True)

    class Meta:
        verbose_name_plural = '作者'
        db_table = 'author'

在子应用当中的moddles.py的文件下打出上述内容。然后开始建表,我们目前需要把这些表具象化,所以在终端中输入以下命令:

python manage.py makemigrations

这行命令的意思是调用manage.py里面的方法,制造一份迁移文件,迁移文件会生成在这里:

迁移文件会把我们修改或创建的表的内容进行修改,有了迁移文件,我们就要迁移了,输入神秘代码:

python manage.py migrate

 

然后发现迁移成功,这个时候,你去点数据库,发现里面发现是空白的怎么办?我知道你很急,但是你先别急,数据库的表不是实时刷新的,所以你要点下总表,在点回来,就刷新列表了,

 那么为什么会有这么多表,我们不是只有两个吗?除了这两个外,其他的是django本身自己的,留着不用管就好了,我们只看book这个表和author,现在表也有了,那么就可以写代码了。

操作方法的编写

对表操作的代码会全部写在子应用的views.py的文件里,这就是MVT中的V,输入以下神秘代码:

from django.http import JsonResponse
from django.shortcuts import render
from rest_framework.decorators import api_view
from experiment import models


# Create your views here.
@api_view(["POST"])
def book_add(request):
    book_name = request.data.get('book_name')
    book_author = request.data.get('book_author')
    book_type = request.data.get('book_type')
    book_SSIN = request.data.get('book_SSIN')

    models.Book.objects.create(book_name=book_name, book_author=book_author, book_type=book_type,book_SSIN=book_SSIN)
    
    return JsonResponse({'status': 'ok'})

 这里用到的东西比较多,报错的话你就导入此名称,api_views的就只有两个,点第一个,第二个models的导入,就是要把我们建的库先导进来(开导!不是),导进来就可以对表进行修改。

挨个来讲,上面的那些学习笔记1里都有,不懂的同学可以回去看看,着重讲下 

return JsonResponse({'status': 'ok'})

当我们操作添加数据成功的时候,是不是该返回一些东西到前端,这个JsonResponse是一个库,里面封装好了返回的方法,这里我们返回一个字段就是状态,然后内容是ok代表添加成功,这一步就做完了。

下一步就是把我们写好的方法添加到路由下,找到主应用下的urls.py文件,这个文件是管理路由的,

from django.contrib import admin
from django.urls import path

from experiment import views


urlpatterns = [
    path('admin/', admin.site.urls),
    path("book_add/",views.book_add),
]

这里说重点,要让路径里能找到你的方法,首先要把子应用添加到路由中,也就是from experiment import views ,这一步的意思是在子应用中找到并导入视图文件,然后就可以在path里添加我们视图里定义的方法了,重点:为什么要加反斜杠?反斜杠的意思是在所有你写的方法里,挨个遍历到名字为你定义方法的名称并执行,如果不加会出现找不到方法的情况!

django服务部署以及接口测试

下一步开启django服务:

右上角找到并且运行,然后终端弹出命令:

点击那个连接,你会在浏览器里打开这个界面

这是正常的,意思是当前这个路径没有可以执行的视图方法。到此就可以开始下一步

如果你开启服务被报错了,例如:Error: That IP address can't be assigned to.那么回到主机地址配置那一步,检查你的ip是否是本地ipv4,地址必须要是本机的才行。

最后一步,就可以到apifox里了,新建一个个人项目,驼峰法命名为项目名称:

 新建一个接口,请求用POST,因为我们的是POST,然后地址为http://local_host/book_add/,将local_host替换为你主机的地址,然后就可以了,

名字自己命名,然后参数找到Body里的form-data,按照学习笔记1的方法键入以上内容保存。

运行然后看状态

到此,项目的第一步圆满完成,让我们看看我们数据库,

发现已经被添加进去了。至此,实验圆满完成!

结语

说一下apiFOX的原理,我们这个软件可以让我们不做前端的页面,直接用来测试接口,那么前端的页面怎么做呢,一般涉及到另外一个编程,但是这就是前端的事了,页面怎么美化,怎么搞与我们后端就无关了(笑),所以我们只负责好数据的增删改查就行,自己动手实操到这一步,恭喜你!很厉害,为自己献上掌声!后面的学习笔记3,会完善其他的接口,并且传回数据到前端,预计是原理加实验一起,感兴趣的同学给各位留个作业,想一想作者的添加接口怎么写,下次笔记会教删改查的方法,查真的是方法封装居多的,用起来其实蛮好玩的。恭喜你,成为了后端开发的入门者!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值