注意:Django2.1不再支持MySQL5.5,必须5.6版本以上
注意,运行manage.py等相关命令时首先要保证在manage.py所在目录
Django默认数据库是sqlite3,我们修改为mysql数据库
修改默认数据库
现在需要在myweb/settings.py文件中修改默认数据库为mysql
使用命令行输入
mysql -uroot -p
输入密码进入mysql数据库并创建名为mydemo的database
create database mydemo;
此时启动服务,若出现报错:
则点击出错的代码所在位置,在.decode前面加上 .encode(‘utf-8’), 原因为python3里面,字符串要先encode指定其为某一编码的字节码之后,才能decode解码
接下来在myapp/models.py文件去创建一个stu表信息操作的Model类
- 在models.py中定义模型类,要求继承自models.Model
- django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列
- 通过models.Field创建字段类型的对象,赋值给属性
- 属性命名限制
- 不能是python的保留关键字
- 由于django的查询方式,不允许使用连续的下划线
from django.db import models
class Stu(models.Model):
''' 创建Stu对应Model类'''
id = models.AutoField(primary_key=True) # 默认主键自增id字段可不写
name = models.CharField(max_length=16)
age = models.SmallIntegerField()
sex = models.CharField(max_length=1)
classied = models.CharField(max_length=8)
# 定义默认输出格式
def __str__(self):
return "%d:%s:%d:%s:%s" % (self.id, self.name, self.age, self.sex, self.classied)
# 自定义对应的表名, 默认表名:myapp_stu
class Meta:
db_table = 'stu' # 改为自定义的表名
创建完之后,执行数据库迁移操作, 依次执行
python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 执行迁移
运行结果如下图
此时打开mysql数据库,可以看到执行后创建的表
手动往stu表中添加一些数据
为了熟悉视图函数的流程,我们使用配置视图函数的方式查看stu表中的信息
首先, 在myapp/views.py 文件中编写视图函数
from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import Stu
def index(request): # 所有视图函数都有request参数,是HttpRequest对象
return HttpResponse("This is my first app index.")
def stu(request):
# 获取stu表中所有信息
lists = Stu.objects.all()
print(lists)
print('------下面是id为1的学生信息------')
print(Stu.objects.get(id=1))
return HttpResponse('输出完成,请看控制台')
在myapp/urls.py文件中配置路由
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('stu/', views.stu, name='stu')
]
执行 python manage.py runserver 启动服务,运行结果如下
模型实例
实例的方法:
- _ _str _ _ (self):重写object方法,此方法在将对象转换成字符串时会被调用
- save():将模型对象保存到数据表中
- delete():将模型对象从数据表中删除
注:
- 创建对象时,django不会对数据库进行读写操作, 调用save()方法才与数据库交互,将对象保存到数据库中
- DoesNotExist:在进行单个查询时,模型的对象不存在时会引发此异常,结合try/except使用
字段
元选项
数据库查询部分
番外篇:
启用admin管理
admin在创建并迁移数据库后可使用
- 创建管理员用户
- 将我们自定义的应用程序的加入到后台管理
打开myapp/admin.py 文件,并编辑代码如下
from django.contrib import admin
from myapp.models import Stu
admin.site.register(Stu)
- 更深入设计后台管理
编辑myapp/models.py文件,在Stu类中添加如下信息,让后台管理显示中文字段
from django.db import models
class Stu(models.Model):
''' 创建Stu对应Model类'''
id = models.AutoField(primary_key=True) # 默认主键自增id字段可不写
name = models.CharField(max_length=16)
age = models.SmallIntegerField()
sex = models.CharField(max_length=1)
classied = models.CharField(max_length=8)
# 定义默认输出格式
def __str__(self):
return "%d:%s:%d:%s:%s" % (self.id, self.name, self.age, self.sex, self.classied)
# 自定义对应的表名, 默认表名:myapp_stu
class Meta:
db_table = 'stu' # 改为自定义的表名
verbose_name = '浏览学生信息'
verbose_name_plural = '学生信息管理'
编辑myapp/admin.py 文件,实现信息管理的个性化定制
from django.contrib import admin
from myapp.models import Stu
# Register your models here.
# Stu模型的管理器
@admin.register(Stu)
class StuAdmin(admin.ModelAdmin):
# listdisplay设置要显示在列表中的字段(id是Django模型默认的主键)
list_display = ('id', 'name', 'age', 'sex', 'classied')
# 设置哪些字段可点击进入编辑页面
list_display_links = ('id', 'name')
# list_per_page设置每页显示多少条记录,默认是100条
list_per_page = 10
# ordering设置默认排序字段,负号表示降序排列
ordering = ('id',) # -id降序
# list_editable 设置默认可编辑字段
# list_editable = ['age', 'sex', 'classied']
部分截图
注:下面为拉钩张老师课件的截图
Django处理一个请求的过程
为视图参数指定默认值
自定义404错误页面
- 在项目根目录下创建文件夹templates
- 配置文件settings.py中关闭debug模式,即DEBUG=False
- 在settings.py中配置模板目录路径,TEMPLATES = [{‘DIRS’: [os.path.join(BASE_DIR,‘templates’)] }]
- 在templates文件夹下创建自定义404.html文件,如
<!DOCTYPE html>
<html>
<head>
<title>404</title>
</head>
<body>
<center>
<h1>404 not found</h1>
</center>
</body>
</html>
启动服务,访问不存在的页面时,会出现404页面对应的内容
返回status状态码:
return HttpResponse(status=403)
返回404错误页面
raise Http404("Poll does not exist ")
url 反向解析 (常用)
上一篇:Django简记(一)
下一篇:Django简记(三)