创建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
相关推荐
r i c k4 分钟前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦18 分钟前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL1 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·1 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德1 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot