python Django的模型层

Django的Model模型介绍

  • 模型是项目中的数据信息源,包内含着存储数据的必要字段和行为;
  • 每个模型对应数据库中的一张表,每个属性对应一个字段;
  • 每个模型都是django.db.models.Model的一个Python子类;
  • Django提供一套自动生成的用于数据库访问的API;
  • 模型与数据库的关系是ORM关系(对象关系-映射)。

为什么要用模型?

  • Model是MVC框架中重要的一部分,负责在数据库中存取数据
  • 它实现了数据模型与数据库的解耦,即不需要依赖于特定的数据库
  • 通过简单的配置就可以更换数据库

Model的开发流程

1、在应用的models.py 定义模型类,继承models.Model

2、把应用加入到项目settings.py 配置文件的INSTALLED_APPS中

3、生成迁移文件

python manage.py makemigrations

4、执行迁移

python manage.py migrate

5、使用模型类进行CRUD操作

  •         C创建
  •         R查询
  •         U更新
  •         D删除

        

定义Model模型

在模型中定义属性,会生成表中的字段

Django根据属性的类型确定一下信息:

  •         当前选择的数据库支持字段的类型
  •         渲染管理表单时使用的默认html控件
  •         在管理站点最低限度的验证

Django会为表增加自动增长的主键列,每个模型只能有一个主键列

属性命名限制

  •         不能是python的保留关键字
  •         由于Django的查询方式,不允许使用连续的下划线

Model模型的实例

模型实例对象是通过object属性获取,即Django为模型类提供的管理器

object:是Manager类型的对象,用于与数据库进行交互

实例的方法:

        __str__(self): 重写object方法,此方法在将对象转换成字符串时会调用

        save(): 将模型对象保存到数据表中

        delete(): 将模型对象从数据表中删除

Model模型的查询

创建Django项目

django-admin startproject mydemo

创建应用

python manage.py startapp myapp

mydemo 目录下创建 templates

templates 目录下创建 myapp

 创建mytest数据库

纠正一下,这里ALLOWED_HOSTS=['*']

 开发流程

数据迁移

 myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):return HttpResponse("首页")

mydemo-->urls.py

from django.contrib import admin
from django.urls import path,includeurlpatterns = [#path('admin/', admin.site.urls),path("",include('myapp.urls')),
]

myapp目录创建urls.py 文件

from django.urls import path
from . import viewsurlpatterns =[path('',views.index,name='index'),
]

 添加操作

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作ob = User()ob.name = "张三"ob.age = 20ob.phone = '123456789'ob.save()return HttpResponse("首页")

 刷新页面

数据库更新数据

 获取model对象

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User()# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save()# 删除操作mod = User.objects # 获取user的model对象user = mod.get(id=6) # 获取id值为6的数据信息print(user.name)return HttpResponse("首页")

 执行删除操作

myapp-->views.py

 执行修改操作

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作ob = User.objects.get(id=1)#print(ob.name)ob.name = "小刘"ob.age = 26ob.save()return HttpResponse("首页")

 

 执行查询操作

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象ulist = mod.all() # 获取所有数据for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页")

获取name值为小刘的所有信息

ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息

获取所有年龄大于20的

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页")

获取所有年龄大于等于20的

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页")

获取所有年龄小于等于20的

    ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)

按age 升序排序

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的#ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的#ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的ulist = mod.order_by("age") # 排序年龄for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页")

按age 升序排序,只获取前3条

    ulist = mod.order_by("age")[:3] # 按age 升序排序,只获取前3条for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)

用户信息管理实战

1、基本结构配置

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的#ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的#ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的#ulist = mod.order_by("age") # 按age 升序排序ulist = mod.order_by("age")[:3] # 按age 升序排序,只获取前3条for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页")# 浏览用户信息
def indexUser(request):pass
# 记载添加用户信息表单
def addUser(request):pass
# 执行用户信息添加
def insertUser(request):pass
# 执行用户信息删除
def delUser(request,uid=0):pass
# 加载用户信息修改表单
def editUser(request,uid=0):pass
# 执行用户信息修改
def updateUser(request):pass

myapp--> urls.py

from django.urls import path
from . import viewsurlpatterns =[path('',views.index,name='index'),# 配置user信息操作路由path('user', views.indexUser,name="indexUser"),path('user/add', views.indexUser, name="addUser"),path('user/insert', views.indexUser, name="insertUser"),path('user/del/', views.indexUser, name="delUser"),path('user/edit/', views.indexUser, name="editUser"),path('user/update', views.indexUser, name="updateUser"),
]

2、

创建目录及文件:templates-->myapp-->user-->index.html

 浏览信息代码

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的#ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的#ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的#ulist = mod.order_by("age") # 按age 升序排序ulist = mod.order_by("age")[:3] # 按age 升序排序,只获取前3条for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页")# 浏览用户信息
def indexUser(request):# try:ulist = User.objects.all()context = {"userslist":ulist}return render(request,"myapp/user/index.html",context) # 加载模板# except:#     return HttpResponse("没有找到用户信息!")
# 记载添加用户信息表单
def addUser(request):pass
# 执行用户信息添加
def insertUser(request):pass
# 执行用户信息删除
def delUser(request,uid=0):pass
# 加载用户信息修改表单
def editUser(request,uid=0):pass
# 执行用户信息修改
def updateUser(request):pass

index.html代码



Title

用户信息管理

{% for user in userslist %}{% endfor %}
ID号姓名年龄电话添加时间操作
{{ user.id }}{{ user.name }}{{ user.age }}{{ user.phone }}{{ user.addtime }}编辑 删除

 效果图

 首页超链接跳转

myapp-->views.py

    return HttpResponse("首页 
用户信息管理")

 

 添加浏览信息和添加信息的超链接

templates-->myapp-->user-->index.html



Title

用户信息管理

浏览信息添加信息

浏览用户信息

{% for user in userslist %}{% endfor %}
ID号姓名年龄电话添加时间操作
{{ user.id }}{{ user.name }}{{ user.age }}{{ user.phone }}{{ user.addtime }}编辑 删除

这里忘记修改了,导致无法跳转页面

myapp-->urls.py

from django.urls import path
from . import viewsurlpatterns =[path('',views.index,name='index'),# 配置user信息操作路由path('user', views.indexUser,name="indexUser"),path('user/add', views.addUser, name="addUser"),path('user/insert', views.insertUser, name="insertUser"),path('user/del/', views.delUser, name="delUser"),path('user/edit/', views.editUser, name="editUser"),path('user/update', views.updateUser, name="updateUser"),
]

 添加用户信息表单

浏览用户信息视图

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的#ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的#ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的#ulist = mod.order_by("age") # 按age 升序排序ulist = mod.order_by("age")[:3] # 按age 升序排序,只获取前3条for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页 
用户信息管理")# 浏览用户信息 def indexUser(request):try:ulist = User.objects.all()context = {"userslist":ulist}return render(request,"myapp/user/index.html",context) # 加载模板except:return HttpResponse("没有找到用户信息!") # 记载添加用户信息表单 def addUser(request):return render(request,"myapp/user/add.html") # 执行用户信息添加 def insertUser(request):pass # 执行用户信息删除 def delUser(request,uid=0):pass # 加载用户信息修改表单 def editUser(request,uid=0):pass # 执行用户信息修改 def updateUser(request):pass

 创建add.html文件:templates-->myapp-->user-->add.html



Title

用户信息管理

浏览信息添加信息

添加用户信息

{% csrf_token %}
姓名:
年龄:
电话:

 执行用户信息添加

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的#ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的#ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的#ulist = mod.order_by("age") # 按age 升序排序ulist = mod.order_by("age")[:3] # 按age 升序排序,只获取前3条for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页 
用户信息管理")# 浏览用户信息 def indexUser(request):try:ulist = User.objects.all()context = {"userslist":ulist}return render(request,"myapp/user/index.html",context) # 加载模板except:return HttpResponse("没有找到用户信息!") # 记载添加用户信息表单 def addUser(request):return render(request,"myapp/user/add.html") # 执行用户信息添加 def insertUser(request):try:ob = User()# 从表单中获取要添加的信息并封装到ob对象中ob.name = request.POST['name']ob.age = request.POST['age']ob.phone = request.POST['phone']ob.save() # 执行保存context = {"info":"添加成功!"}except:context = {"info":"添加失败!"}return render(request,'myapp/user/info.html',context)# 执行用户信息删除 def delUser(request,uid=0):pass # 加载用户信息修改表单 def editUser(request,uid=0):pass # 执行用户信息修改 def updateUser(request):pass

 添加csrf_token令牌

templates-->myapp-->user-->add.html



Title

用户信息管理

浏览信息添加信息

添加用户信息

{% csrf_token %}
姓名:
年龄:
电话:

 执行删除操作

删除视图

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的#ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的#ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的#ulist = mod.order_by("age") # 按age 升序排序ulist = mod.order_by("age")[:3] # 按age 升序排序,只获取前3条for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页 
用户信息管理")# 浏览用户信息 def indexUser(request):try:ulist = User.objects.all()context = {"userslist":ulist}return render(request,"myapp/user/index.html",context) # 加载模板except:return HttpResponse("没有找到用户信息!") # 记载添加用户信息表单 def addUser(request):return render(request,"myapp/user/add.html") # 执行用户信息添加 def insertUser(request):try:ob = User()# 从表单中获取要添加的信息并封装到ob对象中ob.name = request.POST['name']ob.age = request.POST['age']ob.phone = request.POST['phone']ob.save() # 执行保存context = {"info":"添加成功!"}except:context = {"info":"添加失败!"}return render(request,'myapp/user/info.html',context)# 执行用户信息删除 def delUser(request,uid=0):try:ob = User.objects.get(id=uid) # 获取要删除的数据ob.delete() # 执行删除操作context = {"info":"删除成功!"}except:context = {"info":"删除失败!"}return render(request,'myapp/user/info.html',context) # 加载用户信息修改表单 def editUser(request,uid=0):pass # 执行用户信息修改 def updateUser(request):pass

 

tmplates-->myapp-->user-->index.html



Title

用户信息管理

浏览信息添加信息

浏览用户信息

{% for user in userslist %}{% endfor %}
ID号姓名年龄电话添加时间操作
{{ user.id }}{{ user.name }}{{ user.age }}{{ user.phone }}{{ user.addtime }}编辑删除

 

 

 

 编辑页面

tmplates-->myapp-->user-->index.html



Title

用户信息管理

浏览信息添加信息

浏览用户信息

{% for user in userslist %}{% endfor %}
ID号姓名年龄电话添加时间操作
{{ user.id }}{{ user.name }}{{ user.age }}{{ user.phone }}{{ user.addtime }}编辑删除

 创建edit.html: templates-->myapp-->user-->edit.html



Title

用户信息管理

浏览信息添加信息

编辑用户信息

{% csrf_token %}
姓名:
年龄:
电话:

编辑视图

myapp-->views.py

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import User# Create your views here.
def index(request):# 执行Model的操作# 添加操作# ob = User() # 实例化一个新对象# ob.name = "王五"# ob.age = 18# ob.phone = '1232332789'# ob.save() # 新对象就是添加,已存在对象则是修改# 删除操作# mod = User.objects # 获取user的model对象# user = mod.get(id=6) # 获取id值为6的数据信息# print(user.name)# user.delete() # 执行删除操作# 修改操作# ob = User.objects.get(id=1)# #print(ob.name)# ob.name = "小刘"# ob.age = 26# ob.save()# 数据查询mod = User.objects # 获取User模型的Model操作对象#ulist = mod.all() # 获取所有数据#ulist = mod.filter(name='小刘') # 获取name值为小刘的所有信息#ulist = mod.filter(age__gt=20) # 获取所有年龄大于20的#ulist = mod.filter(age__gte=20) # 获取所有年龄大于等于20的#ulist = mod.filter(age__lte=20) # 获取所有年龄小于等于20的#ulist = mod.order_by("age") # 按age 升序排序ulist = mod.order_by("age")[:3] # 按age 升序排序,只获取前3条for u in ulist:print(u.id,u.name,u.age,u.phone,u.addtime)return HttpResponse("首页 
用户信息管理")# 浏览用户信息 def indexUser(request):try:ulist = User.objects.all()context = {"userslist":ulist}return render(request,"myapp/user/index.html",context) # 加载模板except:return HttpResponse("没有找到用户信息!") # 记载添加用户信息表单 def addUser(request):return render(request,"myapp/user/add.html") # 执行用户信息添加 def insertUser(request):try:ob = User()# 从表单中获取要添加的信息并封装到ob对象中ob.name = request.POST['name']ob.age = request.POST['age']ob.phone = request.POST['phone']ob.save() # 执行保存context = {"info":"添加成功!"}except:context = {"info":"添加失败!"}return render(request,'myapp/user/info.html',context)# 执行用户信息删除 def delUser(request,uid=0):try:ob = User.objects.get(id=uid) # 获取要删除的数据ob.delete() # 执行删除操作context = {"info":"删除成功!"}except:context = {"info":"删除失败!"}return render(request,'myapp/user/info.html',context) # 加载用户信息修改表单 def editUser(request,uid=0):try:ob = User.objects.get(id=uid) # 获取要修改的数据context = {"user":ob}return render(request, 'myapp/user/edit.html', context)except:context = {"infp":"没有找到要修改的数据!"}return render(request,'myapp/user/info.html',context) # 执行用户信息修改 def updateUser(request):try:uid = request.POST['id'] # 获取要修改数据的id号ob = User.objects.get(id=uid) # 查询要修改的数据# 从表单中获取要添加的信息并封装到ob对象中ob.name = request.POST['name']ob.age = request.POST['age']ob.phone = request.POST['phone']ob.save() # 执行保存context = {"info":"修改成功!"}except:context = {"info":"修改失败!"}return render(request,'myapp/user/info.html',context)

修改操作的效果图 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部