当前位置: 首页 > news >正文

唐山公司网站建设 中企动力唐山无货源电商软件app

唐山公司网站建设 中企动力唐山,无货源电商软件app,十大免费自媒体素材网站,电子商务网站建设 以为例提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 一、部门列表二、部门管理#xff08;增删改#xff09;三、用户管理过渡到modelform组件四、modelform实例#xff1a;靓号操作五、自定义分页组件六、datepick… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 一、部门列表二、部门管理增删改三、用户管理过渡到modelform组件四、modelform实例靓号操作五、自定义分页组件六、datepick时间插件的使用在layout.html模板文件中引入datepick的js、css1.直接在字段中添加 iddt2.基于ModelForm 七、自定义有Bootstrap样式的ModelForm 一、部门列表 1.在models.py下 class Department(models.Model):部门表title models.CharField(verbose_name标题,max_length32)def __str__(self):return self.title 2.在views文件下 def …(request):return(request,’…html’) def depart_list(request):部门类# 去数据库中获取所有的部门列表queryset models.Department.objects.all()return render(request, depart_list.html, queryset )3.depart_list.html文件下 {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-default stylemargin-top: 20px;!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span批量上传/divdiv classpanel-bodyform methodpost enctypemultipart/form-data action/depart/multi/{% csrf_token %}div classform-groupinput typefile nameexc/divinput typesubmit value上传 classbtn btn-info btn-sm/form/divdiv stylemargin-bottom: 10px/divdiv classpanel-headinga classbtn btn-success btn-xs href/depart/add/span classglyphicon glyphicon-plus aria-hiddentrue/span新建部门/a/div!-- Table --table classtabletheadtrthid/thth名称/thth操作/th/tr/theadtbody{% for obj in queryset %}trth scoperow{{ obj.id }}/thtd{{ obj.title }}/tdtda href/depart/{{ obj.id }}/edit/ classbtn btn-primary btn-xs 编辑/aa href/depart/delete/?nid{{ obj.id }} classbtn btn-danger btn-xs 删除/a/td/tr{% endfor %}/tbody/table/div/div!-- /.container --{% endblock %}二、部门管理增删改 注意两个html文件中都需要{% load static %} 添加部门 1)在urls.py下创建path(‘depart/add/’, views.depart_add), 2)在views.py下创建def depart_add(request) def depart_add(request):添加部门if request.method GET:return render(request, depart_add.html)# 获取用户POST提交过来的数据title request.POST.get(title)# 保存到数据库models.Department.objects.create(titletitle)# 重定向部门列表return redirect(/depart/list/) 3)templates目录下创建depart_add.html {% extends layout.html %} {% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-heading新建部门/divdiv classpanel-bodyform classform-horizontal methodpost{% csrf_token %}div classform-grouplabel classcol-sm-2 control-label标题/labeldiv classcol-sm-10input typetext classform-control placeholder标题 nametitle//div/divdiv classform-groupdiv classcol-sm-offset-2 col-sm-10button typesubmit classbtn btn-primary提 交/button/div/div/form/div/div/div {% endblock %}4)在depart_list.html文件下新建部门处链接到depart/add/地址 删除部门 1)在urls.py下创建path(‘depart/delete/’, views.depart_delete), 2)在views.py下创建def depart_delete(request) 删除 href“/depart/delete/?nid{{ obj.id }}” def depart_delete(request):删除部门# 获取idnid request.GET.get(nid)# 删除models.Department.objects.filter(idnid).delete()# 跳转重定向回部门列表return redirect(/depart/list/) 3)在depart_list.html文件下的删除按钮内 a href/depart/delete/?nid{{ obj.id }} classbtn btn-danger btn-xs 删除/a编辑部门 1)在urls.py下创建path(‘depart/ int:nid /edit/’, views.depart_edit), http://127.0.0.1:8000/depart/int/edit/ 编辑 href“/depart/{{ obj.id }}/edit/” path(depart/int:nid/edit/, views.depart_edit),2)在views.py下创建def depart_edit(request,nid) def depart_edit(request, nid):编辑部门if request.method GET:# 根据id获取编辑的数据row_object models.Department.objects.filter(idnid).first()print(row_object.id, row_object.title)# 重定向到编辑页面return render(request, depart_edit.html, {row_object: row_object})# 用户提交的标题title request.POST.get(title)# 根据id在数据库中进行更新models.Department.objects.filter(idnid).update(titletitle)# 跳转重定向回部门列表return redirect(/depart/list/) 3)vaule表示默认值在depart_list.html文件下的编辑按钮内 value“{{ row_object.title }}” {% extends layout.html %} {% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-heading修改部门/divdiv classpanel-bodyform classform-horizontal methodpost{% csrf_token %}div classform-grouplabel classcol-sm-2 control-label标题/labeldiv classcol-sm-10input typetext classform-control placeholder标题 nametitle value{{ row_object.title }}//div/divdiv classform-groupdiv classcol-sm-offset-2 col-sm-10button typesubmit classbtn btn-primary提 交/button/div/div/form/div/div/div {% endblock %}三、用户管理过渡到modelform组件 获取数据 insert into app01_userinfo(name,password,age,account,creat_time,gender,depart_id) values(刘乐,1e4q,42,3321.02,2010-03-11,2,11);在models.py文件下 class UserInfo(models.Model):员工表name models.CharField(verbose_name姓名,max_length32)password models.CharField(verbose_name密码,max_length32)age models.IntegerField(verbose_name年龄)account models.DecimalField(verbose_name余额,max_digits10,decimal_places2,default0)creat_time models.DateField(verbose_name入职时间) # 有约束 on_deletemodels.CASCADE级联删除depart models.ForeignKey(verbose_name所属部门,toDepartment,to_fieldid,on_deletemodels.CASCADE) # 链接部分被删除时置空 # depart models.ForeignKey(toDepartment,to_fieldid,nullTrue,blankTrue,on_deletemodels.SET_NULL) # 在django中做的约束gender_choices((1,男),(2,女),)gender models.SmallIntegerField(verbose_name性别,choicesgender_choices)在user_list.html文件下 注意return render(request,user_list.html, {queryset: queryset})双引号、花括号、冒号 th{{ obj.id }}/th td{{ obj.name }}/td td{{ obj.password }}/td td{{ obj.age }}/td td{{ obj.account }}/td td{{ obj.creat_time|date:Y-m-d }}/td#日期的读取 td{{ obj.get_gender_display }}/td#性别 td{{ obj.depart.title }}/td #关联其他表的读取在没有利用Django组件ModelForm组件下 添加用户 def user_add(request):if request.method GET:context {gender_choices: models.UserInfo.gender_choices,depart_list: models.Department.objects.all()}return render(request, user_add.html, context)name request.POST.get(name)password request.POST.get(password)age request.POST.get(age)account request.POST.get(account)# from django.utils import timezone# creat_time timezone.now()creat_time request.POST.get(creat_time)gender request.POST.get(gender)depart_id request.POST.get(depart_id)models.UserInfo.objects.create(namename, passwordpassword, ageage,accountaccount, creat_timecreat_time,gendergender, depart_iddepart_id)return redirect(/user/list/) 利用Django组件ModelForm组件 在views.py文件下 class UserModelForm(forms.ModelForm):# name forms.CharField(min_length3, label用户名)class Meta:model models.UserInfofields [name, password, age, account, creat_time, gender, depart]# widgets {# name:forms.TextInput(attrs{class:col-sm-2 control-label})# }def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有的插件添加了class:form-control得样式for name, field in self.fields.items():print(name, field)field.widget.attrs {class: form-control, placeholder: field.label} 添加用户 GET下form UserModelForm() POST下form UserModelForm(datarequest.POST) from django import forms def use_model_form_add(request):添加用户if request.method GET:form UserModelForm()return render(request, user_model_form_add.html, {form: form})# 用户提交的数据进行校验如果合法再保存到数据库form UserModelForm(datarequest.POST)if form.is_valid():# print(form.cleaned_data)form.save()return render(request, user_model_form_add.html, {form: form}) html文件中 span style“color: red”{{ field.errors.0 }}/ span 为提示错误信息 将英文提示改为中文提示信息时需要将settings.py文件中改为 LANGUAGE_CODE ‘zh-hans’ #settings.py # LANGUAGE_CODE en-us LANGUAGE_CODE zh-hans#html div classcol-sm-offset-2 col-sm-10label{{ field.label }}/label{{ field }}span stylecolor: red{{ field.errors.0 }}/span {# input typetext classform-control placeholder年龄 nameage/#} /div编辑用户 GET下form UserModelForm(instancerow_object) POST下form UserModelForm(datarequest.POST, instancerow_object) #views.py from django import forms def user_edit(request, nid):编辑用户# 根据id去数据库获取要编辑的那一行数据row_object models.UserInfo.objects.filter(idnid).first()if request.method GET:# instancerow_object表示将数据库中获取的那行的每一个值都显示在页面上form UserModelForm(instancerow_object)return render(request, use_edit.html, {form: form})form UserModelForm(datarequest.POST, instancerow_object)if form.is_valid():form.save()return redirect(/user/list)return render(request, user_edit.html, {form: form}) 删除用户 def user_delete(request, nid):删除用户models.UserInfo.objects.filter(idnid).delete()return redirect(/user/list/)四、modelform实例靓号操作 #urls.py #int:nid表明要传递nid这个值到views.py文件中 path(pretty/list/, views.pretty_list),path(pretty/add/, views.pretty_add),path(pretty/int:nid/edit/, views.pretty_edit),path(pretty/int:nid/delete/, views.pretty_delete),首先在models.py文件下定义PrettyNum这个类同时用djando命令生成数据库表python manage.py makemigrationspython manage.py migrate数据库下才有app01_prettynum这个数据表 #models.py class PrettyNum(models.Model):靓号表mobile models.CharField(verbose_name电话, max_length11)price models.IntegerField(verbose_name单价,default0)level_choices ((1, 1级),(2, 2级),(3, 3级),(4, 4级),)level models.SmallIntegerField(verbose_name级别, choiceslevel_choices,default1)status_choices ((1, 已占用),(2, 未占用),)status models.SmallIntegerField(verbose_name状态, choices status_choices,default2) 添加靓号 #ModelForm类 from django import forms from django.core.validators import RegexValidatorclass PrettyModelForm(forms.ModelForm):# 验证方法1mobile forms.CharField(label手机号,# validators[RegexValidator(r^159[0-9]$,数字必须以159开头)],validators[RegexValidator(r^1[3-9]\d{9}$, 手机号格式错误)],)class Meta:model models.PrettyNum# fields [mobiles,price,level,status] 一一列举# exclude [level] 排除fields __all__def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有的插件添加了class:form-control得样式for name, field in self.fields.items():print(name, field)field.widget.attrs {class: form-control, placeholder: field.label}# # # 验证方法2钩子方法对用户数据进行验证 # def clean_mobile(self): # txt_mobile self.cleaned_data[mobile] # if len(txt_mobile) !11: # raise ValidationError(手机号格式错误) # return txt_mobile #views.py def pretty_add(request):if request.method GET:form PrettyModelForm()return render(request, pretty_add.html, {form: form})row_object models.PrettyNum.objects.create()form PrettyModelForm(datarequest.POST, instancerow_object)if form.is_valid():form.save()return redirect(/pretty/list)return render(request, pretty_add.html, {form: form}) 编辑靓号 views.py文件下重新定义PrettyEditModelForm 其中mobile forms.CharField(disabledTrue,label“手机号”)表示在编辑时“手机号”显示但不可更改 #ModelForm类 from django import formsclass PrettyEditModelForm(forms.ModelForm):mobile forms.CharField(disabledTrue,label手机号)class Meta:model models.PrettyNum# fields [mobiles,price,level,status] 一一列举# exclude [level] 排除fields __all__def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有的插件添加了class:form-control得样式for name, field in self.fields.items():print(name, field)field.widget.attrs {class: form-control, placeholder: field.label} 确保编辑的手机号在原数据中没有重复。编辑对象的idself.instance.pkdef clean_mobile(self):#print(self.instance.pk)txt_mobile self.cleaned_data[mobile]existsmodels.PrettyNum.objects.exclude(idself.instance.pk).filter(mobiletxt_mobile).exists()if exists:raise ValidationError(手机号已存在)#if len(txt_mobile) !11:#raise ValidationError(手机号格式错误)return txt_mobile#views.py def pretty_edit(request, nid):row_object models.PrettyNum.objects.filter(idnid).first()if request.method GET:form PrettyEditModelForm(instancerow_object)return render(request, pretty_edit.html, {form: form})form PrettyEditModelForm(datarequest.POST, instancerow_object)if form.is_valid():form.save()return redirect(/pretty/list)return render(request, pretty_edit.html, {form: form}) 删除靓号 def pretty_delete(request, nid):models.PrettyNum.objects.filter(idnid).delete()return redirect(/pretty/list/)搜索靓号 get方式传参q pretty_list.html页面添加一个搜索框name“q”,submit提交 div classcol-lg-3 clearfix stylefloat: right;display: blockform methodgetdiv classinput-groupspan classinput-group-btnbutton classbtn btn-default typesubmitspan classglyphicon glyphicon-zoom-in aria-hiddentrue/span/button/spaninput typetext nameq classform-control placeholderSearch for...value{{ search_data }}/div!-- /input-group --/form在靓号列表views.py中添加 data_dict {} search_data request.GET.get(‘q’, “”) if search_data: data_dict[“mobile__contains”] search_data queryset models.PrettyNum.objects.filter(**data_dict).order_by(“-level”) 靓号列表 def pretty_list(request):data_dict {}search_data request.GET.get(q, )if search_data:data_dict[mobile__contains] search_dataqueryset models.PrettyNum.objects.filter(**data_dict).order_by(-level)page_object Pagination(request, queryset) # 分页context {queryset: page_object.page_queryset,search_data: search_data, # 分完页的数据page_string: page_object.html() # 页码}return render(request, pretty_list.html, context) models.PrettyNum.objects.filter(mobile1612313223,id7) data_lict {mobile:168324145,id:7} models.PrettyNum.objects.filter(**data_lict)models.PrettyNum.objects.filter(mobile__contains”1999”) #对于数字类型 #filter(id12) #等于12 #filter(id__gt12) #大于12 #filter(id__gte12) #大于等于12 #filter(id__lt12) #小于12 #filter(id__lte12) #小于等于12 #filter(id12) #对于字符串类型 #filter(mobile”1999”) #filter(mobile__startswith”1999”) #筛选1999开头 #filter(mobile__endswith”1999”) #filter(mobile__contains”1999”)五、自定义分页组件 4.分页组件的创建 在appo01目录下创建utils目录并创建pagination.py文件 自定义分页组件 from django.utils.safestring import mark_safe class Pagination(object):def __init__(self,request,queryset,page_size10,page_parampage,plus5)::param request: 请求对象:param queryset: 符合条件的数据:param page_size: 每页显示多少条数据:param page_param: 在URL中传递的获取分页的参数 例如/pretty/list/?page4:param plus:显示当前页的前或后几页页码import copyquery_dict copy.deepcopy(request.GET)query_dict._mutable Trueself.query_dict query_dictpage request.GET.get(page_param, 1)if page.isdecimal():pageint(page)else:page1self.page pageself.page_sizepage_sizeself.page_parampage_paramself.start (page - 1) * page_sizeself.end page * page_sizeself.page_queryset queryset[self.start:self.end]total_count queryset.count()total_page_count, div divmod(total_count, page_size)if div:total_page_count 1self.total_page_count total_page_countself.plusplusdef html(self):# 计算出显示当前页的的前五页后五页# 数据较少显示全部页码if self.total_page_count 2 * self.plus 1:start_page 1end_page self.total_page_countelse:# 数据较多# 当前页5if self.page self.plus:start_page 1end_page 2 * self.plus 1else:# 当前页5# 当前页5总页面if (self.page self.plus) self.total_page_count:start_page self.total_page_count - 2 * self.plusend_page self.total_page_countelse:start_page self.page - self.plusend_page self.page self.plus# 页码page_str_list []self.query_dict.setlist(self.page_param,[1])first lia href?{}首页/a/li.format(self.query_dict.urlencode())page_str_list.append(first)# 上一页if self.page 1:self.query_dict.setlist(self.page_param,[self.page-1])prev lia href?{}《/a/li.format(self.query_dict.urlencode())else:prev lia href?{}《/a/li.format(1)page_str_list.append(prev)for i in range(start_page, end_page 1):self.query_dict.setlist(self.page_param,[i])if i self.page:ele li classactivea href?{}{}/a/li.format(self.query_dict.urlencode(), i)else:ele lia href?{}{}/a/li.format(self.query_dict.urlencode(), i)page_str_list.append(ele)if self.page self.total_page_count:self.query_dict.setlist(self.page_param,[self.page1])next lia href?{}》/a/li.format(self.query_dict.urlencode())else:self.query_dict.setlist(self.page_param,[self.total_page_count])next lia href?{}》/a/li.format(self.query_dict.urlencode())page_str_list.append(next)# 尾页self.query_dict.setlist(self.page_param,[self.total_page_count])end lia href?{}尾页/a/li.format(self.query_dict.urlencode())page_str_list.append(end)search_string li form methodget stylefloat: leftinput typetext classform-control namepage placeholder页码 stylewidth: 80px;position: relative;float: left;display: inline-block;border-radius: 0button typesubmit classbtn btn-default跳转/button/form/lipage_str_list.append(search_string)page_string mark_safe(.join(page_str_list))return page_string注意 如果以后想要使用这个分页组件你需要做如下几件事在视图函数views.py函数中 def pretty_list(request):#1.根据所需筛选数据queryset models.PrettyNum.objects.all() #2.实例化分页对象page_object Pagination(request,queryset,page_size2)context {queryset: page_object.page_queryset, #分完页的数据page_string: page_object.html() #生成页码}return render(request, pretty_list.html,context)在html页面中ul classpagination{{ page_string }}/ul靓号列表pretty_list views.py文件如上,需要提前导入 from app01.utils.pagination import Pagination pretty_list.html文件 {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-default !-- Default panel contents --div classpanel-heading a classbtn btn-success btn-xs href/pretty/add/span classglyphicon glyphicon-plus aria-hiddentrue/span添加靓号/adiv classcol-lg-3 stylefloat: right;display: block;padding-bottom: 5pxform methodgetdiv classinput-groupspan classinput-group-btnbutton classbtn btn-default typesubmitspan classglyphicon glyphicon-zoom-in aria-hiddentrue/span/button/spaninput typetextnameq classform-control placeholderSearch for...value{{ search_data }}/div!-- /input-group --/form/div/div!-- Table --table classtabletheadtrthid/thth电话号/thth单价/thth级别/thth状态/thth操作/th/tr/theadtbody{% for obj in queryset %}trth scoperow{{ obj.id }}/thtd{{ obj.mobile }}/tdtd{{ obj.price }}/tdtd{{ obj.get_level_display }}/tdtd{{ obj.get_status_display }}/tdtda href/pretty/{{ obj.id }}/edit/ classbtn btn-primary btn-xs 编辑/aa href/pretty/{{ obj.id }}/delete/ classbtn btn-danger btn-xs 删除/a/td/tr{% endfor %}/tbody/table/divdivnavul classpagination{{ page_string }}/ul/nav/div/div!-- /.container --{% endblock %}六、datepick时间插件的使用 在layout.html模板文件中引入datepick的js、css script srchttps://cdn.jsdelivr.net/npm/bootstrap-datepicker1.10.0/dist/js/bootstrap-datepicker.min.js/scriptscript srchttps://cdn.jsdelivr.net/npm/bootstrap-datepicker1.10.0/dist/js/bootstrap-datepicker.min.js/script1.直接在字段中添加 id“dt” script$(function (){$(#dt).datepicker({format:yyyy-mm-dd,startDate:0,language:zh-CN.js:6,autoclose:true});}) /script2.基于ModelForm #id_字段名id_creat_time script$(function (){$(#id_creat_time).datepicker({format:yyyy-mm-dd,startDate:0,language:zh-CN.js:6,autoclose:true});})/script七、自定义有Bootstrap样式的ModelForm 在appo01目录下创建utils目录并创建bootstrap.py文件 from django import formsclass BootstrapModelForm(forms.ModelForm):bootstrap_exclude_fields [img]def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有的插件添加了class:form-control得样式for name, field in self.fields.items():if name in self.bootstrap_exclude_fields:continue# 字段中有属性保留原来的属性没有属性才增加if field.widget.attrs:# 有则添加字典值field.widget.attrs[class] form-controlfield.widget.attrs[placeholder] field.labelelse:field.widget.attrs {class: form-control,placeholder: field.label} 继承BootstrapModelForm并定义class Meta class UserEditModelForm(BootstrapModelForm):class Meta:model models.UserInfofields [name, password, age]注意需要提前引用 from app01.utils.bootstrap import BootstrapModelForm
http://www.w-s-a.com/news/627244/

相关文章:

  • 酒庄企业网站app制作多少钱一个
  • 西安模板建网站网站如何做直播轮播
  • 网站功能需求表百度怎么投放自己的广告
  • 如何免费制作网站网站icp备案费用
  • 网站建设最新教程wordpress表白墙
  • android电影网站开发网站建设与设计实习报告
  • 公司汇报网站建设方案烟台seo网站推广
  • 文章网站哪里建设好找素材的网站
  • 怎么做自己的彩票网站公司建设网站价格
  • 国外比较好的设计网站网站后台无法上传图片
  • 帮别人做网站的公司是外包吗用户登录
  • 关于我们网站模板小莉帮忙郑州阳光男科医院
  • 上海门户网站怎么登录永州网站制作
  • 微信网站模版下载做销售的去哪个网站应聘
  • 好看的个人博客主页长安网站优化公司
  • 企业网站关站大型综合新闻门户网站织梦模板
  • 网站优化排名易下拉效率查企业网站
  • 网站建设湛江关于汽车的网站
  • 南宁模板建站多少钱企业黄页名单
  • 企业网站的建设一般要素有网站定制公司地址
  • 婚纱摄影网站设计案例四川省城乡建设厅官方网站
  • 怎么做海淘网站wordpress首页表单
  • 大连网站优化技术长沙高端网站建设服务
  • 郎创网站建设做的网站 v2ex
  • 广东网站建设教程江西城乡住房建设网站
  • 做ppt卖给网站wordpress insert
  • 文化传媒公司网站模板wordpress转typecho
  • 网站建设设计视频郑州 服装网站建设
  • 网站建设什么公司好织梦cms默认密码
  • 大型网站 空间网上商城官网入口