Python-Django框架从第一个项目---pycharm

0. 说在前面的话

    由于目前需要创建一个新的项目,而自己又不是很理解各种框架,所以,在之前想对web的框架进行一个简单的理解。我预计的方案如下:

  1. 使用pycharm 创建一个Django的框架的一个简单的项目(项目参考bilibili上的千峰老师的内容)
  2. 我的内容并不会有视频上讲解那么细致,因为那个视频实在是从小白中的小白入门的

   我主要涉及的内容:

  1. python框架简介
  2. 使用pycharm建立一个最简单框架的步骤
  3. 各部分文件的作用

1.  python框架简介

 

        MTV分别表示什么以及基本的作用请参考下图: 

 

 

接下来我就来讲一下用户通过web发送一个请求到其得到结果,整个流程在MTV 框架下 是如何展现的:

  1. 用户输入URL,回车之后,请求发送给URL控制器。
  2. 模板模块通过URL来匹配响应的view函数,从而调用图模块
  3. view试图到models中调用相关的数据结果,当model好,将数据返回给相应的view
  4. view将数据渲染成为html文件,然后再返回给控制器,也就是我们的用户

最基础的过程就如上所示,本篇blog的内容也就是走通一下以上的整个过程,以对框架能为我们做的事情做一个大体的了解

 

2.后台建立

2.0 pycharm建立Django项目

2.0.1 新建项目

2.0.2 目录结构

 

2.1 数据库表设计

 

为什么要设计表?

     表实际上就是我们前端的想要请求得到的数据的来源,所以,建立一个网站的前提就i是我们能够有一个供使用的数据库

表的设计结果如下:

 

2.2 建立mysql并且启动mysql服务:

如何安装mysql请自行百度

这个过程的前提是你的电脑已经安装了mysql数据库,并且已经启动服务了,查看的方法:

命令行输入netstat -an|find "3306"

服务正在启动了

2.3 配置数据库

   我们有两种方式建立我们的数据库:

  1.    直接通过mysql建立,通过mysql的客户端来建立,建表并且加入数据
  2.  (Django框架) 通过建立对象来直接添加数据条数到数据库当中去 ---本篇博客要讲的内容

 

2.3.1 配置Django框架setting的内容

1、配置setting中为mysql

   由于对于Django中,其默认的数据库是sqlite,而我们使用的则是mysql属于不同的数据库,所以我们进行切换

2 配置过程

说在前面:若出现mysql cannot save settings please 。。sdkname

请参考:https://blog.csdn.net/wu_l_v/article/details/79049718

 

1、__init___  py中:

import pymysql
pymysql.install_as_MySQLdb()

2、setting中:


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DjangoTest1',
        'USER': 'root',
        'PASSWORD':'123456',
        'HOST':'localhost',
        'PORT':'3306',

    }
}

 

3 、配置整体过程:

 

 

 

 

2.4 应用

2.4.1 创建应用

但是出现:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.2.

具体找到自己的django包的位置:

这个是我的包的位置:C:\Users\Scottar\AppData\Roaming\Python\Python37\site-packages\django\db\backends\mysql

修改base.py 

修改operations.py

 

解决方案:https://blog.csdn.net/weixin_33127753/article/details/89100552

2.4.2 激活应用

找到installed app的那一行  然后加入 新的app的名字也就是myapp

 

2.5 定义模型

正如前面所述的,模型的作用是后端与数据库进行操作的模块

定义过程:

from django.db import models

# Create your models here.
class Grades(models.Model):
    gname    = models.CharField(max_length=20)
    gdate    = models.DateTimeField()
    ggirlnum = models.IntegerField()
    gboynum  = models.IntegerField()
    isDelete = models.BooleanField(default=False)

class Students(models.Model):
    sname     = models.CharField(max_length=20)
    sgender   = models.BooleanField(default=True)
    sage        = models.IntegerField()
    scontend = models.CharField(max_length=20)
    isDelete  = models.BooleanField(default=False)
    # 关联外键
    sgrade    = models.ForeignKey("Grades")

需要注意的是:

类中的 关联外键

 是表示其中对于sgrade来说:

为什么说外键能保持数据的一致性、完整性
你想想,你的图中的第一章表分割成了表1和表2,表2的学号引用了表1的学号字段作为外键,如果不建立外键,只是和表1一样单纯性 地设立一个学号字段,那么和建立外键有什么区别呢?

比如表1中张三的学号为20140900001,那么我在表2中插数据的时候在学号字段插20140900001来记录张三的成绩不也是做到了表 的解耦了吗?

这里存在的问题是,在不设置外键的情况下,表2的学号字段和表1的学号字段是没有关联的。只是你自己认为他们有关系而已,数据库并 不认为它俩有关系。也就是说,你在表2的学号字段插了一个值(比如20140999999),但是这个值在表1中并没有,这个时候,数据库还是允 许你插入的,它并不会对插入的数据做关系检查。然而在设置外键的情况下,你插入表2学号字段的值必须要求在表1的学号字段能找到。 同时,如果你要删除表1的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。你想,如 果表2还引用表1的某个学号,你却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。数据的一致性还包括数据类型的一致性(这 个见下面就知道了)。
 

 

这个就是外键的作用!!

 

2.6  在数据库中生成数据表

这个也就是我们之前提到的,我们可以利用django框架的结构直接进行表格建立都是可以的:

2.6.1 生成迁移文件

执行:python manage.py makemigrations

报错:TypeError: __init__() missing 1 required positional argument: 'on_delete'
解决方案:修改代码:

# 关联外键
sgrade    = models.ForeignKey("Grades",on_delete=models.CASCADE)

外键后面要加上:on_delete=models.CASCADE

 

仍然报错“django.db.utils.InternalError: (1049, "Unknown database 'djangotest1'")

解决方案:打开命令行创建数据库

这个时候执行的结果:

 

 

2.6.2 执行迁移

执行<python  manage.py  migrate>

执行结果:

 

2.7 测试数据库

2.7.1 测试数据库的前提准备

 

执行结果:

 

2.7.2 查询数据  增加数据

大家仔细观察当前的步骤:最终的save的命令,才是相当于最终直接将数据写入到数据库当中去

按照同样的方法再创建一个,其中

2.7.4 修改数据  删除数据

1、修改数据 直接对对象进行操作就好:

 

2、删除数据:

 

2.7.5 关联对象

 

2.8   启动服务器

 

 

 

 

3 站点管理”

 

3.1 创建管理员 配置管理端

 

 

3.1.1 实验结果

3.1.2 登陆界面,并进行简单的调整

输入网址:http://127.0.0.1:8000/admin/

3.1.3 调整成为中文

3.2 对表的操作那个页面进行各种配置操作

3.2.1 界面上显示我们要管理的数据的表

class GradesAdmin(admin.ModelAdmin):
    inlines = [StudentsInfo]   # 由于他们关联了再一起 ,所以这个时候,我们所有加入的学生都是属于这一个班级的

    #列表页属性
    list_display = ['pk','gname','gdate','ggirlnum','gboynum','isDelete']
    list_filter = ['gname']  #用来过滤字段使用的
    search_fields = ['gname']
    list_per_page = 3   #这个是用来每页放几个
    # 添加、修改页属性  下面的这两个属性是不能同时使用的
    # fields = ['ggirlnum','gboynum','gname','gdate','isDelete']
    fieldsets = [
        ("num",{"fields":['ggirlnum','gboynum']}),
        ("base",{"fields":['gname','gdate','isDelete']}),
    ]   #  这个属性的作用就是将我要添加的属性放在不同的地方。分成组进行加入

 上面的代码的作用就是为了 告诉我们我们可以让界面上显示出来什么 

3.2.2 注册 我们要管理的表格

 

对于我们要管理得到的表格,要对其进行注册:

通过装饰器的方式进行。

 

 

 

 

3.3 小结:

对于我所参考的资料以及我所编辑得到的代码你都有可以从我的github上进行获得

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有水杯和雨伞的工科男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值