简介:本文的首席执行官注释将介绍如何使用Django写作,删除,删除和检查的相关内容。我希望这对每个人都会有所帮助。让我们来看看。
操作方法:首先,运行python manage.py创建useperuser命令以创建一个管理员帐户。
然后在URL中输入/管理员以到达管理员登录页面。登录后,您会发现由于我们尚未注册,因此数据库中没有任何项目可显示。
接下来,我们注册管理中管理的数据模型;在Admin.py中注册模型。然后刷新页面,您可以看到ContoryMessage的数据表,可以添加和删除以简单添加,删除和更改。
主页菜单是根据用户的权威动态生成的,不同的菜单对应于不同的功能视图。Menu添加,删除和更改。
2.路线
1.html
1. API接口功能要求:设计一些接口URL,以允许前端/客户请求此URL获取数据并显示,更改数据(添加,删除和检查)
其次,设计逻辑:获取,发布,放置,补丁,删除通过HTTP协议请求符合恢复规格的设计
第三,简单的源代码:
3.序列化序列化
#IMPORT模型类和REST_FRAMEWORK序列化模块序列化器
从.models导入文章
来自REST_FRAMEWORK导入序列化器
#Define序列化类,使用Modelerializer方法
class carticleSerializer(serializers.modelserializer):
元类:
模型=文章#Specify序列化模型类
fields ='_ all _'#select序列化字段,您可以自己选择该字段
4.查看功能视图
来自django.http导入httpresponse
来自django.views.decocotors.csrf导入csrf_exempt
从.models导入文章
从.Serializer Import ArticleSerializer
来自REST_FRAMEWORK.RENDERERS导入JSONRENDERER
来自REST_FRAMEWORK.PARSERS导入JSONPARSER
#CH致电CSRF装饰CSRF_EXEMPT模块解决交叉域访问问题
#jsonrenderer,将python的dict转换为客户
#JSONPARSER负责转换要求接收到DICE的JSON数据
#写写一
#call the Docoration @csrf_exempt在越过域视图的需要
@csrf_exempt
DEF ARTICE_LIST(请求):
如果request.method =='get':
Arts = Article.Objects.all()#get模型数据
ser = carticleSerializer(实例=艺术,许多= true)#serializatized数据实例
#Next,在REST_FRAMEWORK方法中使用JSONRENDER方法渲染数据
JSON_DATA = JSONRENDERER()。渲染(ser.data)
返回httpresponse(json_data,content_type ='application/json',status = 200)
#写法2
jsonresponse类(httpresponse):
def _ init(self,data,** kwargs):
content = jsonrenderer()。渲染(数据)
kwargs ['content_type'] ='application/json'
super(jsonresponse,self)._ init(内容,** kwargs)
#prand和删除并根据ID修改操作接口
@csrf_exempt
DEF ARTICE_DETAIL(请求,ID):
尝试:
art = article.objects.get(id = id)
除了文章。
返回httpresponse(状态= 404)
评论:
*写入方法II定义JSONRESPONSE类以打包返回的数据数据和content_type返回类型
*API接口
获取/发布
获取/put/patch/delete
*Postman测试渲染
没有固定的要求,您可以自己编写文件统一管理,也可以在多个文件中使用时编写它。
建立数据模型后,Django将为您自动生成一组数据库APIS,允许您创建,检索,更新和删除对象并将它们存储在Models.py中。
有关模型的更多操作,请参考。
第10节,案例客户关系管理系统,删除,纠正,充电笔记
1.建立模型
1.导入模型
fromdjango.dbimportmodels
2.创建一个学生桌
classstudent(models.model):#c c c c
name = models.charfield(max_length = 20)
age = model.smallintegerfield()
sex =模型。
QQ = model.Charfield(max_length = 20,unique = true)
phone = models.charfield(max_length = 20,unique = true)
c_time = models.detetime field(verbose_name ='创建时间',auto_now_add = true)
e_time = models.detetimefield(verbose_name ='修改时间',auto_now = true)
等级= models.foreignkey('等级',on_delete = models.set_null,null = true)
IS_DELETE = model.booleanfield(default = false)#在常规开发过程中,我们不会直接删除数据,而是添加IS_DELETE字段的数据以标记数据的状态。
def__str __(self):
返回'%s-%s-%s'%(self.name,self.age,self.sex)
3.创建学生详细信息表格
ClassStudentDetail(Models.Model):#学生详细信息表
num = models.charfield('id卡',max_length = 40,unique = true)
College = Models.Charfield('毕业学校',max_length = 20,默认='')
student = models.onetoonefield('student',on_delete = models.cascade,rection_name ='lidet')
def__str __(self):
返回'%s-%s'%(self.num,self.college)
4.创建一个班级表
classGrade(models.model):#类表
name = models.charfield('class name',max_length = 20)
num = models.charfield('分类',max_length = 20)
def__str __(self):
返回'%s-%s'%(self.name,self.num)
5.创建一个课程表
ClassCourse(Models.Model):#课程表
name = models.charfield('课程名称',max_length = 20)
student = models.manytomanyfield('学生',通过='注册')
def__str __(self):
返回'%s'%self.name
6.创建学生表和课程表的中间手表
classEnroll(models.model):#
student = models.foreignkey('学生',on_delete = models.cascade)
course = models.foreignkey('课程',on_delete = models.cascade)
PAY = Models.FloatField('付款金额',默认值= 0)
c_time = models.detetime field(verbose_name ='创建时间',auto_now_add = true)
def__str __(self):
返回'%s'%self.pay
##
2.实现其他,删除和调查功能实现
1.索引页面视图功能
fromdjango.shortcutsimportrender,重定向,反向
fromdjango.httpimporttpresponse
FromStudent.ModelSimportstudent,等级,StudentDetail
fromdjango.db.modelsimportq
fromdjango.core.paginatorimportpaginator
#在这里创建您的视图。
Defindex(请求):
部分='学生名单'
搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数
ifsearch:
ifsearch.isdigit():#如果是数字类型
sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配
else:#如果是字符类型
sts = student.objects.filter(name = search,is_delete = false)#
else:#搜索不匹配,并检查所有学生
sts = student.objects.filter(is_delete = false)
sts = sts.order_by('-c_time')#
returnrender(请求,'student/index.html',context = {
'sts':sts,
“部分”:部分,
“搜索”:搜索,
})
2.学生删除页面视图
defstudent_delete(请求,PK):
student = student.objects.get(pk = pk)#s s s s s s s p p p p p p p p p p s s s s
student.is_delete = true#mark is_delete as true,
student.save()#保存
returnredirect(反向('student:index'))
3.学生详细信息页面查看
defstudent_detail(请求,PK):
部分='学生详细信息'
等级=等级。
sts = student.objects.gets(pk = pk)#获取使用当前ID为PK的学生信息
等级=等级。
详细信息= StudentDetail.objects.get(student = STS)#指定学生的查询详细信息
returnrender(请求,'sut剂/student_detail.html',context = {
“部分”:部分,
“成绩”:等级,
'sts':sts,
“等级”:等级,
“细节”:细节,
})
4.添加页面视图功能
defstudent_add(请求):
部分='添加学生信息'
等级= grade.objects.all()#
ifrequest.method =='get':
returnrender(请求,'sut剂/student_detail.html',context = {
“部分”:部分,
“成绩”:等级,
})
ifrequest.method =='post':
#获取课程信息
grade_id = request.post.get('等级')#获取等级。
尝试:
等级=等级。
除了:
等级=无
#获取学生信息名称,年龄,性别,QQ,电话
数据= {
'name':request.post.get('name'),
'age':request.post.get('age'),
'sex':request.post.get('sex'),
'qq':request.post.get('qq'),
“电话”:request.post.get('phone'),
“等级”:与学生相关的等级#表
}
student = student.objects.create(**数据)
#获取学生详细信息信息
StudentDetail.Objects.create(
num = request.post.get('num'),
College = request.post.get('College'),
学生=学生#桌协会
治愈
returnredirect(反向('student:index'))
5.修改学生信息页面视图功能
defstudent_edit(请求,PK):
部分='修改学生信息'
sts = student.objects.get(pk = pk)#查询ID学生是PK
等级=等级。
详细信息= StudentDetail.objects.get(student = STS)#指定学生的查询详细信息
ifrequest.method =='get':
returnrender(请求,'sut剂/student_detail.html',context = {
“部分”:部分,
'sts':sts,
“等级”:等级,
“细节”:细节,
})
ifrequest.method =='post':
#获取课程信息
grade_id = request.post.get('等级')#从前端返回等级
尝试:
等级=等级。
除了:
等级=无
#获取学生信息并修改
student = student.objects.get(pk = pk)
student.name = request.post.get('name')
student.age = request.post.get('age')
Student.Sex = request.post.get('性')
student.qq = request.post.get('qq')
student.phone = request.post.get('phone')
student.grade =等级#桌协会
#获取学生详细信息
尝试:
详细信息= student.detail#更正,关联表在学生中
除了:
详细信息= StudentDetail()
细节。学生=学生#表协会,协会表在demail中
devail.num = request.post.get('num')
difail.college = request.post.get('College')
lide.save()#保存
student.save()#保存
returnredirect(反向('student:index'))
第三,分页函数实施
1.主页的页面方法
1.1主页的视图功能
Defindex(请求):
部分='学生名单'
搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数
ifsearch:
ifsearch.isdigit():#如果是数字类型
sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配
else:#如果是字符类型
sts = student.objects.filter(name = search,is_delete = false)#
else:#搜索不匹配,并检查所有学生
sts = student.objects.filter(is_delete = false)
sts = sts.order_by('-c_time')#
#分分
total_num = sts.count()#总数据金额
per_page = int(request.get.get.get('per_page',5))#每个页面默认号码5
page = int(request.get.get('page',1))#p p p p p p p p p 1
p = paginator(sts,per_page,all_empty_first_page = true)
sts = p.get_page(page)#每页显示的数据
total_page = p.num_pages#总页码
page_list = p.page_range#获取页面范围
returnrender(请求,'student/index.html',context = {
'sts':sts,
“部分”:部分,
“搜索”:搜索,
'total_num':total_num,
'total_page':total_page,
“页面”:页面,
'per_page':per_page,
'page_list':page_list,
})
1.2,html中页码的设置
navaria-label =“页面导航”样式=“ display:inline-black”
ulclass =“分页”
li {%ifpage == 1%} class =“禁用” {%endif%}
ahref =“ {%如果付费1%} {%url'student:index'%}?page = {page | add:-1} per_page = {per_page} {%else%} {%url url'quttay'student:index'index'%}?page = {pag}} per_page = {{per_page}} {%endif%}“ aria-label =“ pronos”
Spanaria-Hidden =“ true”以前/跨度
/A
/li
{in page_list%}的i%}
li {%ifpage == i%} class =“ active” {%endif%} ahref =“ {{request.path}?page = {i} per_page = {per_page}” {}}}}}}/a/a/a/a/li
{%endfor%}
li {%ifpage == total_page%} class =“ disabled” {%endif%}
ahref =“ {%如果付费topal_page%} {%url'student:index'%}?page = {page | add:1} per_page = {per_page} {%ell's} {%ell ans} {%url'suden'studen:inst studen:index'%}?page = {pag}} per_page = {{per_page}}} {%endif%}“ aria-label =“ next”“”
Spanaria-Hidden =“ true”下一个/跨度
/A
/li
/ul
/nav
! - 单个按钮 -
Divlass =“ BTN-ROUND”样式=“ Display:inline-Black; Margin-Top:-68px“”
buttonType =“ button” class =“ btn btn btn-default dropdown-toggle” data-toggle =“下拉” aria-haspopup =“ true” aria-expanded =“ false”
{per_page}} bar/page spanclass =“ caret”/span
/按钮
ulclass =“下拉菜单”“”
liahref =“ {%url'学生:index'%}?page = {page}} per_page = 5“ 5”页/a/a/li
liahref =“ {%url'student:index'%}?page = {page}} per_page = 10“ 10” 10英寸页/a/a/a/li
liahref =“ {%url'学生:index'%}?page = {page}} per_page = 15“ 15”页/a/a/li
liahref =“ {%url'student:index'%}?page = {page}} per_page = 20“ 20” 20“页/a/a/li
/ul
/div
2.对于主页分页方法2(使用标签)
2.1,索引中的视图功能
Defindex(请求):
部分='学生名单'
搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数
ifsearch:
ifsearch.isdigit():#如果是数字类型
sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配
else:#如果是字符类型
sts = student.objects.filter(name = search,is_delete = false)#
else:#搜索不匹配,并检查所有学生
sts = student.objects.filter(is_delete = false)
sts = sts.order_by('-c_time')#
#分分
total_num = sts.count()#总数据金额
per_page = int(request.get.get.get('per_page',5))#每个页面默认号码5
page = int(request.get.get('page',1))#p p p p p p p p p 1
p = paginator(sts,per_page,all_empty_first_page = true)
sts = p.get_page(page)#每页显示的数据
total_page = p.num_pages#总页码
page_list = p.page_range#获取页面范围
returnrender(请求,'student/index.html',context = {
'sts':sts,
“部分”:部分,
“搜索”:搜索,
'total_num':total_num,
'total_page':total_page,
“页面”:页面,
'per_page':per_page,
'page_list':page_list,
})
2.2。在templatetags文件夹中创建student_custormer_tags.py
#!/usr/bin/python
# - * - 编码:UTF-8 - * -
#作者:CYB时间:2019/5/25 23:34
FromDjangoImportTemplate
寄存器= template.library()
@register.inclusion_tag('student/paginitor.html',take_context = true)
defipination_html(上下文):#d d d d d d d d d d d d上下
total_page = context ['total_page']#总页码
pay = context ['page']#显示第一页的数据
page_list = context ['page_list']#页范围
per_page = context ['per_page']#每个页面号码
'''
假设total_page = 6
两个页码控制方法:
当num = 1#当前页面的当前页面上有几页
上一个1 2 3下一页
前4 5 6下一页
上一页1 2下一页
前5 6个下一页
当num = 2#当前页面的当前页面上有几页
上一个1 2 3下一页
上一个1 2 3 4下一页
上一个1 2 3 4 5下一页
前2 3 4 5 6下一页
前4 5 6下一页
'''
pay_list = []
num = 2
#1,左 +当前页面上显示的页码列表
#1.1,当左边不够时,页面范围1到当前页面
ifpage-num = 0:
foriinrange(1,第+1页):
page_list.append(i)
else:#当左侧足以显示时,页面范围为当前页面的PAG-NUM
foriinrange(Page-num,Page+1):
page_list.append(i)
#2,右侧显示的页码列表 +当前页面
#2.1,当右边不够时,页码范围当前页面到total_page
ifpage+num = total_page:
foriinrange(Page+1,total_page+1):
page_list.append(i)
#2.2,当右侧足够时,页面范围(当前页+1)to(当前页 +num)
别的:
forInrange(页+1,页+num):
page_list.append(i)
返回 {
'total_page':total_page,
“页面”:页面,
'page_list':page_list,
'per_page':per_page
}
2.3,构建新构建的标签渲染模板paginitor.html
ulclass =“分页”
li {%ifpage == 1%} class =“禁用” {%endif%}
a {%ifpage1%} href =“ https://www.shouxicto.com/article/ {%url'student:index'%}?{{{per_page}} {%endif%}“ aria-label =“以前”
Spanaria-Hidden =“ true”?/span
/A
/li
{page_list%的page_num%}
li {%ifpage_num == page%} class =“ active” {%endif%} ahref =“ {{request.path}?page = {page_num} per_page = {per_page}}}}}}} {page_num} {page_num}
{%endfor%}
li {%ifpage == total_page%} class =“ disabled” {%endif%}
a {%ifpage total_page%} href =“ https://www.shouxicto.com/article/ {{request.path}}?}} {%endif%}“ aria-label =“ next”
Spanaria-Hidden =“ true”?/span
/A
/li
/ul
2.4。在index.html中导入后退出
1.导入:{%加载student_customer_tags%}
2.报价:
nav aria-label =“页面导航”样式=“ display:inline-black”
{%pagination_html%}
/nav
第四页显示
1.主页显示
2.添加页面显示
3.修改页面显示
结论:以上是首席CTO的相关内容的摘要,请注意如何使用Django写作,删除,删除和检查。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?