创建Django项目

创建Django项目

复制代码
django-admin startproject bookmanager

进入到bookmanager目录下运行

复制代码
python manage.py runserver

创建子应用

复制代码
python manage.py startapp book

注册子应用

使其与工程bookmanager建立联系

创建实体类

在book=>models里面

复制代码
from django.db import models

# Create your models here.

class BookInfo (models.Model):
    name = models.CharField(max_length=10)

class PeopleInfo (models.Model):
    name = models.CharField(max_length=10)
    gender = models.BooleanField() # 性别
    book = models.ForeignKey(BookInfo , on_delete=models.CASCADE)

扩展:

复制代码
class BookInfo (models.Model):

    name = models.CharField(max_length=10,unique=True ,verbose_name='书籍名称') # unique:是否唯一
    pub_date = models.DateField(null=True)
    readcount = models.IntegerField(default=0)
    commentcount = models.IntegerField(default=0)
    is_delete = models.BooleanField(default=False)

    class Meta:
        db_table = 'bookinfo' #修改表的名字
        verbose_name= '书籍管理' # admin站点的使用


    def __str__(self):
        return self.name

class PeopleInfo (models.Model):
    GENDER_CHOICES=(
        (1,'male'),
        (2,'female')
    )
    name = models.CharField(max_length=10)
    gender = models.SmallIntegerField(choices=GENDER_CHOICES,default=1) # 性别
    description = models.CharField(max_length=200 ,null=True)

    book = models.ForeignKey(BookInfo , on_delete=models.CASCADE)
    is_delete =  models.BooleanField(default=False)
    class Meta:
        db_table = 'peopleeinfo'
        verbose_name = '人物关系'
    
    def __str__(self):
        return self.name

1) 数据库表名

模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名。

可通过db_table指明数据库表名。

2) 关于主键

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

3) 属性命名限制

  • 不能是python的保留关键字。

  • 不允许使用连续的下划线,这是由django的查询方式决定的。

  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

    复制代码
    属性=models.字段类型(选项)

4)字段类型

类型 说明
AutoField 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
BooleanField 布尔字段,值为True或False
NullBooleanField 支持Null、True、False三种值
CharField 字符串,参数max_length表示最大字符个数
TextField 大文本字段,一般超过4000个字符时使用
IntegerField 整数
DecimalField 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数
FloatField 浮点数
DateField 日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
TimeField 时间,参数同DateField
DateTimeField 日期时间,参数同DateField
FileField 上传文件字段
ImageField 继承于FileField,对上传的内容进行校验,确保是有效的图片

5) 选项

选项 说明
null 如果为True,表示允许为空,默认值是False
blank 如果为True,则该字段允许为空白,默认值是False
db_column 字段的名称,如果未指定,则使用属性的名称
db_index 若值为True, 则在表中会为此字段创建索引,默认值是False
default 默认
primary_key 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
unique 如果为True, 这个字段在表中必须有唯一值,默认值是False

null是数据库范畴的概念,blank是表单验证范畴的

6) 外键

在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:

  • CASCADE级联,删除主表数据时连通一起删除外键表中数据
  • PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
  • SET_NULL设置为NULL,仅在该字段null=True允许为null时可用
  • SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用
  • **SET()**设置为特定值或者调用特定方法
  • DO_NOTHING 不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常

模型迁移

复制代码
#生成迁移文件
python manage.py makemigrations
#执行迁移
python manage.py migrate

表结构中就会有这两个类

站点管理

进入Django的管理界面

Log in | Django site admin

这个时候表中是没有管理员的账号密码,所以我们要创建

复制代码
 python .\manage.py createsuperuser

输入刚才创建的账号密码后进入后台管理页面

发现没有我们创建的BookInfo和PeopleInfo模型

在book==》admin.py文件中注册自定义的模型类

复制代码
from book.models import BookInfo, PeopleInfo

# Register your models here.
admin.site.register([BookInfo, PeopleInfo])

重新启动并刷新页面

添加book信息

选择Add

添加之后发现不知道添加的类的内容

重新写模型的str类

复制代码
class BookInfo (models.Model):
    name = models.CharField(max_length=10)

    def __str__(self):
        return self.name

路由设置

我们想要通过一下地址访问页面

复制代码
http://127.0.0.1:8000/index/

在views.py中定义页面

复制代码
def index(request):
    return HttpResponse("ok")

在urls.py中设置路由

复制代码
from book.views import index
urlpatterns = [
 path('admin/', admin.site.urls),   
 #定义的index路由
 path('index/',index)
]

还有一种更加模块化的方法配置路由

先配置子应用的路由: 子应用中创建urls.py,定义路由

复制代码
from django.urls import path
from book.views import index
urlpatterns = [
    path('index/', index)
]

工程中映射

复制代码
from django.contrib import admin
from django.urls import path,include
from book.views import index
urlpatterns = [
    path('admin/', admin.site.urls),
    #使用include
    path('', include('book.urls'))
]

模版使用

1、创建index.html文件(路径在book/templates/book)

2、配置templates文件地址

3、渲染页面

复制代码
def index(request):
    #render表示渲染
    return render(request,"book/index.html")

如果想要将返回的内容在页面中显示

复制代码
def index(request):
    # context是字典类型
    context={
  
        'title' : "你好"
    }
    return render(request,"book/index.html",context=context)

页面中使用{{}}获取数据

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="#">{{ title }}</a>
</body>
</html>

静态文件

创建static文件夹,并在里面放入可以访问的静态图片

配置静态文件地址

在setting.py中有个STATIC_URL (静态文件的访问路径),在其下方设置

复制代码
STATICFILES_DIRS=[
    os.path.join(BASE_DIR, 'book/static')
]

通过该地址进行访问

复制代码
http://127.0.0.1:8000/static/python.png

App应用配置

在每个应用目录中都包含了apps.py文件,用于保存该应用的相关信息。

在创建应用时,Django会向apps.py文件中写入一个该应用的配置类,如

复制代码
class BookConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'book' #表明加载到那个子应用
    verbose_name ='图书管理' # 配置中文名

修改数据库为Mysql

将原来的sqlite的DATABASES替换成自己的mysql的

复制代码
DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',  # 默认
        'NAME': 'django',
        'HOST': '127.0.0.1', # mysql的ip地址
        'PORT': 3306, # mysql的端口
        'USER': 'root',
        'PASSWORD': 'root'

}

init.py_中写入

复制代码
import pymysql

pymysql.install_as_MySQLdb()

如果没有安装pymysql,记得安装一下,命令:

复制代码
pip install pymysql
相关推荐
扑克中的黑桃A5 小时前
金仓多模数据库平替MongoDB的电子证照国产化实践——从2TB数据迁移到1600+并发支撑
数据库
计算机毕业设计小帅5 小时前
【2026计算机毕业设计】基于Django的社区婴幼儿预防接种系统
数据库·django·课程设计
友友马6 小时前
『 数据库 』MySQL复习 - 内置函数详解
数据库·mysql
互联网中的一颗神经元7 小时前
小白python入门 - 6. Python 分支结构——逻辑决策的核心机制
开发语言·数据库·python
数据库知识分享者小北7 小时前
AI Agent的未来之争:任务规划,该由人主导还是AI自主?——阿里云RDS AI助手的最佳实践
数据库·阿里云·数据库rds
凸头7 小时前
MySQL 的四种 Binlog 日志处理工具:Canal、Maxwell、Databus和 阿里云 DTS
数据库·mysql·阿里云
码界奇点8 小时前
MongoDB 排序操作详解sort方法使用指南
数据库·mongodb·性能优化
武子康8 小时前
Java-155 MongoDB Spring Boot 连接实战 | Template vs Repository(含索引与常见坑)
java·数据库·spring boot·后端·mongodb·系统架构·nosql