Django运用以及创建一个web项目(全)

目录

概述:

MVC编辑模式

Django安装

创建Django项目

配置数据库

创建业务

激活应用

定义模型

在数据库中生成数据表

测试数据操作

启动服务器

Admin站点管理

修改数据表

自定义管理页面

关联对象


Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。

Django是一个开放源代码的Web应用框架,由Python写成。

Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。

Django采用了MVC的软件设计模式,即模型M,视图V和控制器C

概述:

一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

 

MVC编辑模式

Model(模型):

  • 是应用程序中用于处理应用程序数据逻辑的部分
  • 通常模型对象负责在数据库中存取数据

View(视图)

  • 是应用程序中处理数据显示的部分
  • 通常视图是依据模型数据创建的

Controller(控制器)

  • 是应用程序中处理用户交互的部分
  • 通常控制器负责从视图中读取数据,控制用户输入,并向模型发送数据

 

Django安装

如何获得Django

Django是BSD许可下的开源软件。我们建议使用最新版本的Python 3.支持Python 2.7的最后一个版本是Django 1.11 LTS。有关每个Django版本支持的Python版本,以下是如何获得它:

选项1:获取最新的正式版

最新的官方版本是2.2.5。阅读 2.2.5发行说明,然后使用pip安装 :

pip install Django==2.2.5

删除Django是:pip uninstall Django

 

创建Django项目

创建的项目设计:

 在合适位置创建一个目录

打开黑屏终端进入到上一步创建的目录下,输入django-admin startproject project

在这个文件夹下面生成了一个project目录

使用pycharm打开这个文件

 

配置数据库

注意:Django默认使用SQLlite数据库

去project中settings.py文件

默认使用的是SQL数据库,但是我不使用SQL数据库 

在settings.py文件中,通过DATABASES选项来进行数据库配置

python3.x安装的是PyMySQL

在__init__.py文件中写入两行代码

import pymysql
pymysql.install_as_MySQLdb()

 

创建一个数据库

将settings.py中DATABASES里面的内容进行修改,NAME改为数据库的名字

配置示例:

 

创建业务

在一个项目中可以创建多个应用,每个应用进行一种业务处理

打开黑屏终端,进入django文件夹下的project目录下

输入:python manage.py startapp myApp

在过程中可能出现的问题

raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

   django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

解决方法:

C:\Python37\Lib\site-packages\django\db\backends\mysql(python安装目录)打开base.py,注释掉以下内容:

        if version < (1, 3, 13):

          raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

现在在文件夹中出现了myApp

myApp的目录说明:

 

激活应用

在settings.py文件中,将myApp加入到INSTALLED_APPS中

 

定义模型

概述:有一个数据表,就对应有一个模型

在model.py文件中定义模型,模型类要继承models.Model类

在models.py中的代码:

from django.db import models

# Create your models here.
class Grades(models.Model):
    gname = models.CharField(max_length=20) #班级名称
    gdate = models.DateTimeFieldField()  #日期
    gboynum = models.IntegerField()
    ggirlnum = 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()
    scontent = models.CharField(max_length=20)
    sgrade = models.ForeignKey('Grades',on_delete=models.CASCADE)  #班级是外键,关联Grades类
    isDelete = models.BooleanField(default=False)

说明:不需要定义主键,在生成时自动添加,并且值为自动添加

注意:在添加外键时需要加入on_delete=models.CASCADE,否则在之后执行生成迁移文件命令时将会报错

 

 

在数据库中生成数据表

生成迁移文件

在project目录下,执行命令:python manage.py makemigrations

可能出现的错误:

找到这个文件,对编码进行修改

修改代码:

执行成功之后的显示:

但是我在MySQL数据中查看是发现并没有产生表格,我后来在网上找到了一篇博客进行了解释

https://blog.csdn.net/hpu_yly_bj/article/details/78928089

因为刚刚的命令仅仅是在migrations下生成迁移文件,还未迁移

 

执行迁移

使用python manage.py sqlmugrate appname 文件名对刚刚具体执行了什么语句进行查看

使用python manage.py migrate appname 文件名重新迁移

现在产生了表

 

测试数据操作

进入到python shell环境

命令:python manage.py shell

引入包

命令:

  • from myApp.models import Grades,students
  •  from django.utils import timezone
  • from datetime import *

 

查询所有数据

命令:类名.objects.all()

 

添加数据

本质:是创建一个模型类的对象实例

现在在数据库中查看表

使用类名.objects.all()进行查询

查看某一条的记录: 类名.objects.get(pk=数据index)

删除数据

命令:模型对象.delete()

物理删除,数据库的表里的数据被删除了

 

关联对象

创建一个学生模型对象

获得关联对象的集合,例如:需求获取python03班的所有学生

新建一些学生对象

命令:对象名.关联的类名小写_set.all()

 

 

启动服务器

格式:python manage.py runserver ip:port

注意:ip可以不写,不写的话代表本机ip。端口号默认是8000

这是一个纯python写的轻量级web服务器,仅仅在开发测试中使用

在网页上访问127.0.0.1:8000

 

Admin站点管理

概述:内容发布和公共访问

内容发布:负责添加、修改、删除数据的

 

配置Admin应用

在settings.py文件中的INSTALLED_APPS添加  'django.contrib.admin'     默认是已经添加好了

 

创建管理员用户

创建超级用户,命令:python manage.py createsuperuser

依次输入用户名、邮箱、密码

刚刚创建的超级用户信息存储在数据库的auth_user表中

创建好了之后运行服务器,进入http://127.0.0.1:8000/admin

输入自己创建好的用户名和密码,进入新的界面

现在这个界面是英语,如果想变成中文需要汉化

将settings.py中的

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

修改为

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

刷新页面,页面中就变成中文了

 

修改数据表

修改admin.py文件

from django.contrib import admin

# Register your models here.
#引入两张表
from .models import Grades,students

#注册
admin.site.register(Grades)
admin.site.register(students)

重启服务器,班级和学生数据已经存在

 

点击Gradess和Studentss会出现之前存储的信息

 

自定义管理页面

修改admin.py文件

在里面设置一个class类

from django.contrib import admin

# Register your models here.
#引入两张表
from .models import Grades,students

#注册
class GradesAdmin(admin.ModelAdmin):
    #列表页属性
    #显示字段
    list_display = ['pk','gname','gdate','gboynum','ggirlnum']
    #过滤字段
    list_filter = ['gname']
    #查找字段
    search_fields = ['gname']
    #分页,超过5条数据会分页
    list_per_page = 5

    #添加修改页属性,注意:fields和fieldsets不能同时使用
    # 规定属性的先后顺序
    #fields = []
    #给属性分组
    fieldsets = [
        ('num',{'fields':['gboynum','ggirlnum']}),
        ('base',{'fields':['gname','gdate','isDelete']}),
    ]

admin.site.register(Grades,GradesAdmin)
admin.site.register(students)

重启服务器

 

可以对班级进行增加

保存之后就新出现了一个班级 

 

关联对象

需求:在创建一个班级时,直接添加几个学生

#注册班级时加入两个学生
class StudentsInfo(admin.TabularInline):
    model = students
    extra = 2

#注册
class GradesAdmin(admin.ModelAdmin):
    inlines = [StudentsInfo]
    #列表页属性
    #显示字段
    list_display = ['pk','gname','gdate','gboynum','ggirlnum']
    #过滤字段
    list_filter = ['gname']
    #查找字段
    search_fields = ['gname']
    #分页,超过5条数据会分页
    list_per_page = 5
    #添加修改页属性,注意:fields和fieldsets不能同时使用
    # 规定属性的先后顺序
    #fields = []
    #给属性分组
    fieldsets = [
        ('num',{'fields':['gboynum','ggirlnum']}),
        ('base',{'fields':['gname','gdate','isDelete']}),
    ]

刷新页面,点击创建班级时会在下面要填入两个学生的信息

同理可以在admin.py修改学生的显示

class StudentsAdmin(admin.ModelAdmin):
    def gender(self):
        if self.sgender:
            return '男'
        else:
            return '女'
    #设置页面列的名称
    gender.short_description = '性别'
    list_display = ['pk', 'sname', 'sage', gender, 'scontent','sgrade','isDelete']


admin.site.register(students,StudentsAdmin)

还可以使用装饰器去完成注册,效果是一样的。

@admin.register(students)
class StudentsAdmin(admin.ModelAdmin):
    def gender(self):
        if self.sgender:
            return '男'
        else:
            return '女'
    #设置页面列的名称
    gender.short_description = '性别'
    list_display = ['pk', 'sname', 'sage', gender, 'scontent','sgrade','isDelete']

#admin.site.register(students,StudentsAdmin)

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空城机

有钱捧个钱场,没钱捧个人场

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

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

打赏作者

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

抵扣说明:

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

余额充值