Django简记(二)

19 篇文章 0 订阅
10 篇文章 0 订阅

注意: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简记(三)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SimpleZihao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值