2025-03-15
编程
00
请注意,本文编写于 43 天前,最后修改于 33 天前,其中某些信息可能已经过时。

目录

1. 简介
2. 修改配置文件
2.1 修改配置文件的路径
2.2 修改配置文件添加app的注册地址
3. 配置数据库
3.1 修改配置文件的数据库配置
3.2 修改TestModel/models.py 文件
3.3 数据库的操作方式
3.31 添加数据
3.32 获取数据
3.33 更新数据
3.34 删除数据
3.4 数据库操作实例 --ignore
4. 配置路由
4.1 配置路由路径
4.2 GET&POST获取数据
4.3 返回数据格式(三种方式) --ignore
4.4 serializers序列化
4.5 csrf 配置使用 --ignore
5. Django Admin 管理工具
5.1 注册django admin工具
5.2 激活管理工具
5.3 使用管理工具
5.4 创建超级用户
5.5 admin注册数据模型
6. Django Form 组件
6.1 导入 forms
6.2 使用 forms --ignore
7. Django 用户认证(Auth)组件
7.1 导入auth
7.2 使用auth --ignore
8. Django cookie 与 session
8.1 Cookie教程
8.11 设置 cookie
8.12 获取 cookie
8.13 删除 cookie
8.2 Session教程
8.21 session 设置
8.22 session 获取
8.23 session 删除
9.Django 中间件
9.1 Django 默认的中间件配置
9.2 自定义中间件
9.21 自定义中间件的第一步
9.22 自定义中间件的第二步
9.23 在settings.py 中的 MIDDLEWARE 里注册自定义的中间件类
9.24 自定义的中间件继承的方法

Django 是一个用于构建 Web 应用程序的高级 Python Web 框架

1. 简介

Django 版本要对应的 Python 版本

1.8 2.7, 3.2 , 3.3, 3.4, 3.5 1.9, 1.10 2.7, 3.4, 3.5 1.11 2.7, 3.4, 3.5, 3.6 2.0 3.4, 3.5, 3.6, 3.7 2.1, 2.2 3.5, 3.6, 3.7 3.2 3.6, 3.7, 3.8, 3.9, 3.10 4.0 3.8, 3.9, 3.10 4.1 3.8, 3.9, 3.10, 3.11 (added in 4.1.3) 4.2 3.8, 3.9, 3.10, 3.11, 3.12 (added in 4.2.8)

2. 修改配置文件

2.1 修改配置文件的路径

TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], ## 修改前端模板文件位置 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]

2.2 修改配置文件添加app的注册地址

TestModel 为app的名称

INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'TestModel', # 添加TestModel(即创建的app的名称) )

3. 配置数据库

3.1 修改配置文件的数据库配置

注销原有数据库,修改为现在使用的数据库配置

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'runoob', # 数据库名称 'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 'PORT': 3306, # 端口 'USER': 'root', # 数据库用户名 'PASSWORD': '123456', # 数据库密码 } }

3.2 修改TestModel/models.py 文件

from django.db import models class Test(models.Model): name = models.CharField(max_length=20)

3.3 数据库的操作方式

3.31 添加数据

添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT

from django.http import HttpResponse from TestModel.models import Test # 数据库操作 def testdb(request): test1 = Test(name='runoob') test1.save() return HttpResponse("<p>数据添加成功!</p>")

3.32 获取数据

from django.http import HttpResponse from TestModel.models import Test # 数据库操作 def testdb(request): # 初始化 response = "" response1 = "" # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM list = Test.objects.all() # filter相当于SQL中的WHERE,可设置条件过滤结果 response2 = Test.objects.filter(id=1) # 获取单个对象 response3 = Test.objects.get(id=1) # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2; Test.objects.order_by('name')[0:2] #数据排序 Test.objects.order_by("id") # 上面的方法可以连锁使用 Test.objects.filter(name="runoob").order_by("id") # 输出所有数据 for var in list: response1 += var.name + " " response = response1 return HttpResponse("<p>" + response + "</p>")

3.33 更新数据

修改数据可以使用 save() 或 update()

from django.http import HttpResponse from TestModel.models import Test # 数据库操作 def testdb(request): # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE test1 = Test.objects.get(id=1) test1.name = 'Google' test1.save() # 另外一种方式 #Test.objects.filter(id=1).update(name='Google') # 修改所有的列 # Test.objects.all().update(name='Google') return HttpResponse("<p>修改成功</p>")

3.34 删除数据

删除数据库中的对象只需调用该对象的delete()方法即可

from django.http import HttpResponse from TestModel.models import Test # 数据库操作 def testdb(request): # 删除id=1的数据 test1 = Test.objects.get(id=1) test1.delete() # 另外一种方式 # Test.objects.filter(id=1).delete() # 删除所有数据 # Test.objects.all().delete() return HttpResponse("<p>删除成功</p>")

3.4 数据库操作实例 --ignore

暂无

4. 配置路由

4.1 配置路由路径

可以使用通配符

from django.urls import re_path # 用re_path 需要引入 urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), # 普通路径 ]

4.2 GET&POST获取数据

from django.shortcuts import render,redirect,HttpResponse def web(request): if request.method == 'GET': name = request.GET.get('name') password = request.GET.get('password') if request.method == 'POST': name = request.POST.get('name') password = request.POST.get('password')

4.3 返回数据格式(三种方式) --ignore

def web_render(request): return render(request, 'shop/user_reg.html', {"form_obj": form_obj}) def web_redirect(request): return redirect('/your_url/{}/'.format(post.id)) def web_HttpResponse(request): return HttpResponse("hello")

4.4 serializers序列化

我们知道前后端常用json数据结构交互, 在后端我们常想把一个对象返回给前端,但是json序列化是不能序列化对象(不过可以添加序列化参数encoder序列化原理和序列化组件差不多需要自己定义序列化类和返回的结构),所以就有了我们的序列化组件,可以自定义特定结构把对象序列化返回给前端,同时可以对前端传入的参数进行数据校验等功能。

from django.core import serializers #序列化 def web_login(request): if request.method == 'GET': page = int(request.GET.get('page')) result = serializers.serialize("json", models.ComicMain.objects.filter(id__range=[page,page+12]).all()) nums = models.ComicMain.objects.count() # 登录成功 backdata["code"] = 200 backdata["msg"] = "登录成功" backdata["nums"] = nums backdata["data"] = result return HttpResponse(json.dumps(backdata))

4.5 csrf 配置使用 --ignore

5. Django Admin 管理工具

5.1 注册django admin工具

Django 提供了基于 web 的管理工具,在项目的 settings.py 中的 INSTALLED_APPS 查看

INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', )

5.2 激活管理工具

通常我们在生成项目时会在 urls.py 中自动设置好,我们只需去掉注释即可

5.3 使用管理工具

启动开发服务器,然后在浏览器中访问 http://127.0.0.1:8000/admin/

5.4 创建超级用户

python manage.py createsuperuser

Username (leave blank to use 'root'): admin

Email address: admin@runoob.com

Password:

Password (again):

Superuser created successfully.

5.5 admin注册数据模型

为了让 admin 界面管理某个数据模型,我们需要先注册该数据模型到 admin。比如,我们之前在 TestModel 中已经创建了模型 Test 。修改 TestModel/admin.py

from django.contrib import admin from TestModel.models import Test # Register your models here. admin.site.register(Test)

6. Django Form 组件

Django Form 组件用于对页面进行初始化,生成 HTML 标签,此外还可以对用户提交的数据进行校验(显示错误信息)。 报错信息显示顺序:

● 先显示字段属性中的错误信息,然后再显示局部钩子的错误信息。

● 若显示了字段属性的错误信息,就不会显示局部钩子的错误信息。

● 若有全局钩子,则全局钩子是等所有的数据都校验完,才开始进行校验,并且全局钩子的错误信息一定会显示。

6.1 导入 forms

from django import forms

6.2 使用 forms --ignore

7. Django 用户认证(Auth)组件

7.1 导入auth

# 认证模块 from django.contrib import auth # 对应数据库 from django.contrib.auth.models import User

7.2 使用auth --ignore

8.1 Cookie教程

rep = HttpResponse(json.dumps(backdata)) rep.set_cookie(key,value,...) rep.set_cookie("_id",encryptdata,expires=3600) rep.set_signed_cookie(key,value,salt='加密盐',...)

提示

tip: cookies要设置过期时间

request.COOKIES.get(key)

rep =HttpResponse || render || redirect rep.delete_cookie(key) 8.14 操作cookie实例 def login(request): if request.method == "GET": return render(request, "login.html") username = request.POST.get("username") password = request.POST.get("pwd") user_obj = models.UserInfo.objects.filter(username=username, password=password).first() print(user_obj.username) if not user_obj: return redirect("/login/") else: rep = redirect("/index/") rep.set_cookie("is_login", True) return rep def index(request): print(request.COOKIES.get('is_login')) status = request.COOKIES.get('is_login') # 收到浏览器的再次请求,判断浏览器携带的cookie是不是登录成功的时候响应的 cookie if not status: return redirect('/login/') return render(request, "index.html") def logout(request): rep = redirect('/login/') rep.delete_cookie("is_login") return rep # 点击注销后执行,删除cookie,不再保存用户状态,并弹到登录页面 def order(request): print(request.COOKIES.get('is_login')) status = request.COOKIES.get('is_login') if not status: return redirect('/login/') return render(request, "order.html")

8.2 Session教程

8.21 session 设置

request.session["key"] = value request.session.set_expiry(3600) #设置过期时间

提示

tip: session要设置过期时间

8.22 session 获取

request.session.get('key')

8.23 session 删除

删除整条记录(包括 session_key、session_data、expire_date 三个字段):

request.session.flush()

删除 session_data 里的其中一组键值对:

del request.session["key"]

9.Django 中间件

Django 中间件是修改 Django request 或者 response 对象的钩子,可以理解为是介于 HttpRequest 与 HttpResponse 处理之间的一道处理过程。

Django 中间件作用:

● 修改请求,即传送到 view 中的 HttpRequest 对象。

● 修改响应,即 view 返回的 HttpResponse 对象。

中间件组件配置在 settings.py 文件的 MIDDLEWARE 选项列表中。 配置中的每个字符串选项都是一个类,也就是一个中间件。

9.1 Django 默认的中间件配置

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

9.2 自定义中间件

中间件可以定义四个方法,分别是:

process_request(self,request)

process_view(self, request, view_func, view_args, view_kwargs)

process_exception(self, request, exception)

process_response(self, request, response)

9.21 自定义中间件的第一步

在 app 目录下新建一个 py 文件,名字自定义,并在该 py 文件中导入

MiddlewareMixin: from django.utils.deprecation import MiddlewareMixin

9.22 自定义中间件的第二步

自定义的中间件类,要继承父类 MiddlewareMixin:

class MD1(MiddlewareMixin): pass

9.23 在settings.py 中的 MIDDLEWARE 里注册自定义的中间件类

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'app01.middlewares.MD1', ]

9.24 自定义的中间件继承的方法

class MD1(MiddlewareMixin): def process_request(self, request): print("md1 process_request 方法。", id(request)) #在视图之前执行 def process_response(self,request, response): :#基于请求响应 print("md1 process_response 方法!", id(request)) #在视图之后 return response def process_view(self,request, view_func, view_args, view_kwargs): print("md1 process_view 方法!") #在视图之前执行 顺序执行 #return view_func(request) def process_exception(self, request, exception):#引发错误 才会触发这个方法 print("md1 process_exception 方法!") # return HttpResponse(exception) #返回错误信息