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

旧笔记本 做网站外贸网站为何搜不到

旧笔记本 做网站,外贸网站为何搜不到,少儿编程网课国内哪个好,网站突然不被百度收录启动项目命令 python manage.py runserver 分页功能封装到类中去 封装的类的代码 自定义的分页组件,以后如果想要使用这个分页组件#xff0c;你需要做#xff1a; def pretty_list(request):# 靓号列表data_dict {}search_data request.GET.get(q, 自定义的分页组件,以后如果想要使用这个分页组件你需要做 def pretty_list(request):# 靓号列表data_dict {}search_data request.GET.get(q, )if search_data:data_dict[mobile__contains] search_datafrom app01.utils.pagination import Pagination# 根据自己的情况去筛选自己的数据queryset models.PrettyNum.objects.filter(**data_dict).order_by(-level)# 实例化分页对象1page_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)在html页面中{% for obj in queryset %}{{ obj.xx }}{% endfor %}ul classpagination{{ page_string }}/ulfrom django.utils.safestring import mark_safe class Pagination(object):def __init__(self, request, queryset, page_size10, page_parampage, plus5):from django.http.request import QueryDictimport copyquery_dict copy.deepcopy(request.GET)query_dict._mutable Trueself.query_dict query_dictself.page_param page_parampage request.GET.get(page_param, 1)if page.isdecimal():page int(page)else:page 1self.page pageself.page_size page_sizeself.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.plus plusdef html(self):if self.total_page_count 2 * self.plus 1:# 数据库中的数据比较少都没有达到11页start_page 1end_page self.total_page_count 1else:# 当前页5时if self.page self.plus:start_page 1end_page 2 * self.plus 1else:if (self.page self.plus) self.total_page_count:start_page self.total_page_count - 2 * self.plusend_page self.total_page_countelse:# 数据库中的数据比较多11页start_page self.page - self.plusend_page self.page self.plus# 页码page_str_list []self.query_dict.setlist(self.page_param, [1])print(self.query_dict.urlencode())# 上一页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:self.query_dict.setlist(self.page_param, [1])prev lia href?{}上一页/a/li.format(self.query_dict.urlencode())page_str_list.append(prev)for i in range(start_page, end_page):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)page_str_list.append(lia href?{}首页/a/li.format(self.query_dict.urlencode()))# 下一页if self.page self.total_page_count:self.query_dict.setlist(self.page_param, [self.page 1])prev lia href?{}下一页/a/li.format(self.query_dict.urlencode())else:self.query_dict.setlist(self.page_param, [self.total_page_count])prev lia href?{}下一页/a/li.format(self.query_dict.urlencode())page_str_list.append(prev)self.query_dict.setlist(self.page_param, [self.total_page_count])page_str_list.append(lia href?{}尾页/a/li.format(self.query_dict.urlencode()))search_string liform stylefloat: left;margin-left: -1px methodgetinput typetext namepagestyleposition: relative;float: left;display: inline-block;width: 80px;border-radius: 0;classform-control placeholder页码button styleborder-radius: 0 classbtn btn-default typesubmit跳转/button/form/lipage_str_list.append(search_string)page_string mark_safe(.join(page_str_list))return page_string小bug,搜索分页情况下 分页时候保留原来的搜索条件 http://127.0.0.1:8000/pretty/list/?q888page1 在用户列表页面使用分页功能 ModelForm引入时间样式自动生成了id为id_create_time) {% extends layout.html %}{% block css %}link relstylesheet hrefhttps://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.min.css {% endblock %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title新建用户/h3/divdiv classpanel-bodyform methodpost novalidate{% csrf_token %}{% for field in form %}div classform-grouplabel{{ field.label }}/label{{ field }}span stylecolor: red;{{ field.errors.0 }}/span/div{% endfor %}button typesubmit classbtn btn-primary提 交/button/form/div/div/div {% endblock %}{% block js %}script srchttps://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.js/scriptscript srchttps://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js/scriptscript$(function(){$(#id_create_time).datepicker({format: yyyy-mm-dd,startDate: 0,language: zh-CN,autoclose: true});})/script {% endblock %} 引入时间样式(自定义组件id为dt) {% extends layout.html %} {% load static %}{% block css %}link relstylesheet hrefhttps://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.min.css {% endblock %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title新建用户/h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel姓名/labelinput typetext classform-control placeholder姓名 nameuser/divdiv classform-grouplabel密码/labelinput typetext classform-control placeholder密码 namepwd/divdiv classform-grouplabel年龄/labelinput typetext classform-control placeholder年龄 nameage/divdiv classform-grouplabel余额/labelinput typetext classform-control placeholder余额 nameac/divdiv classform-grouplabel入职时间/labelinput iddt typetext classform-control placeholder入职时间 namectime/divdiv classform-grouplabel性别/labelselect classform-control namegd{% for item in gender_choices %}option value{{ item.0 }}{{ item.1 }}/option{% endfor %}/select/divdiv classform-grouplabel部门/labelselect classform-control namedp{% for item in depart_list %}option value{{ item.id }}{{ item.title }}/option{% endfor %}/select/divbutton typesubmit classbtn btn-primary提 交/button/form/div/div/div {% endblock %}{% block js %}script srchttps://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.js/scriptscript srchttps://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js/scriptscript$(function(){$(#dt).datepicker({format: yyyy-mm-dd,startDate: 0,language: zh-CN,autoclose: true});})/script {% endblock %} 在html中增加属性的方法1 在html中增加属性的方法2 在html中增加属性的方法3 UserEditModelForm类继承了BootStrapModelForm类的方法BootStrapModelForm继承了forms.ModelForm的方法所以使用继承能够更好封装代码功能 封装每部分的功能拆分到每个模块中去 运行创建数据库代码的命令语句 python manage.py makemigrations python manage.py migrate 两种方式实现密码输入框 实现密码不一致不会被清空 密码加密 实现重置密码功能 管理员添加编辑删除和重置密码功能实现 admin.py代码 from django.core.exceptions import ValidationError from django.shortcuts import render, redirect from app01 import models from app01.utils.pagination import Paginationdef admin_list(request): 管理员列表 data_dict {}search_data request.GET.get(q, )if search_data:data_dict[username__contains] search_dataqueryset models.Admin.objects.filter(**data_dict)page_object Pagination(request, queryset)context {queryset: page_object.page_queryset,page_string: page_object.html(),search_data: search_data}return render(request, admin_list.html, context)from django import forms from app01.utils.bootstrap import BootStrapModelForm from app01.utils.encrypt import md5class AdminModelForm(BootStrapModelForm):confirm_password forms.CharField(label确认密码,widgetforms.PasswordInput(render_valueTrue))class Meta:model models.Adminfields [username, password, confirm_password]widgets {password: forms.PasswordInput(render_valueTrue)}def clean_password(self):pwd self.cleaned_data.get(password)return md5(pwd)def clean_confirm_password(self):pwd self.cleaned_data.get(password)confirm md5(self.cleaned_data.get(confirm_password))if confirm ! pwd:raise ValidationError(密码不一致)return confirmclass AdminEditModelForm(BootStrapModelForm):class Meta:model models.Adminfields [username]class AdminResetModelForm(BootStrapModelForm):confirm_password forms.CharField(label确认密码,widgetforms.PasswordInput(render_valueTrue))class Meta:model models.Adminfields [password, confirm_password]widgets {password: forms.PasswordInput(render_valueTrue)}def clean_password(self):pwd self.cleaned_data.get(password)md5_pwd md5(pwd)exists models.Admin.objects.filter(idself.instance.pk, passwordmd5_pwd).exists()if exists:raise ValidationError(密码不能与之前的密码相同)return md5_pwddef clean_confirm_password(self):pwd self.cleaned_data.get(password)confirm md5(self.cleaned_data.get(confirm_password))if confirm ! pwd:raise ValidationError(密码不一致)return confirmdef admin_add(request): 添加管理员 title 新建管理员if request.method GET:form AdminModelForm()return render(request, change.html, {form: form, title: title})form AdminModelForm(datarequest.POST)if form.is_valid():form.save()return redirect(/admin/list/)return render(request, change.html, {form: form, title: title})def admin_edit(request, nid): 编辑管理员 row_object models.Admin.objects.filter(idnid).first()if not row_object:# return render(request, error.html, {msg: 数据不存在})return redirect(/admin/list/)title 编辑管理员if request.method GET:form AdminEditModelForm(instancerow_object)return render(request, change.html, {form: form, title: title})form AdminEditModelForm(datarequest.POST, instancerow_object)if form.is_valid():form.save()return redirect(/admin/list/)return render(request, change.html, {form: form, title: title})def admin_delete(request, nid): 删除管理员 models.Admin.objects.filter(idnid).delete()return redirect(/admin/list/)def admin_reset(request, nid): 重置密码 row_object models.Admin.objects.filter(idnid).first()if not row_object:return redirect(/admin/list/)title 重置密码 - {}.format(row_object.username)if request.method GET:form AdminResetModelForm()return render(request, change.html, {form: form, title: title})form AdminResetModelForm(datarequest.POST, instancerow_object)if form.is_valid():form.save()return redirect(/admin/list/)return render(request, change.html, {form: form, title: title}) admin_list.html代码 {% extends layout.html %}{% block content %} div classcontainerdiv stylemargin-bottom: 10px classclearfixa classbtn btn-success href/admin/add/ target_blankspan classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建管理员/adiv stylefloat: right;width: 300px;form methodgetdiv classinput-groupinput typetext nameq classform-control placeholder关键字value{{ search_data }}span classinput-group-btnbutton classbtn btn-default typesubmitspan classglyphicon glyphicon-search aria-hiddentrue/span/button/span/div/form/div/divdiv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span管理员列表/div!-- Table --table classtable table-borderedtheadtrthID/thth用户名/thth密码/thth重置密码/thth操作/th/tr/theadtbody{% for obj in queryset %}trth{{ obj.id }}/thtd{{ obj.username }}/tdtd******/tdtda href/admin/{{ obj.id }}/reset/重置密码/a/tdtda classbtn btn-primary btn-xs href/admin/{{ obj.id }}/edit/编辑/aa classbtn btn-danger btn-xs href/admin/{{ obj.id }}/delete/删除/a/td/tr{% endfor %}/tbody/table/divdiv classclearfixul classpagination stylefloat:left;{{ page_string }}/ul/div /div {% endblock %} change.html模板 {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title{{ title }}/h3/divdiv classpanel-bodyform methodpost novalidate{% csrf_token %}{% for field in form %}div classform-grouplabel{{ field.label }}/label{{ field }}span stylecolor: red;{{ field.errors.0 }}/span/div{% endfor %}button typesubmit classbtn btn-primary提 交/button/form/div/div/div {% endblock %} 表示字段不能为空 提示用户名或密码输入错误 django自动帮我们把session功能定义好了使用只需要这样一个语句 登录成功后 cookie,随机字符串 session,用户信息 在其他需要登录才能访问的页面中都需要加入 def index(request):info request.session.get(info)if not info:return redirect(/login/) 目标在18个视图函数中统一加上 info request.session.get(info) if not info:return redirect(/login/) 编写中间件 from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse, redirectclass AuthMiddleware(MiddlewareMixin):def process_request(self, request):# 0.排除那些不需要登录就能访问的页面# request.path_info /login/if request.path_info /login/:return# 1.读取当前访问的用户的session信息如果能读到说明已登录过就可以继续向后走info_dict request.session.get(info)if info_dict:return# 2.没有登录过重新回到登录页面return redirect(/login/) 应用中间件 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.middleware.auth.AuthMiddleware, ] 从session中取到用户名 {{ request.session.info.name }} 设置图像验证码 import random from PIL import Image, ImageDraw, ImageFont, ImageFilterdef check_code(width120, height40, char_length5, font_fileZixunHappyBold.ttf, font_size28):code []img Image.new(modeRGB, size(width, height), color(255, 255, 255))draw ImageDraw.Draw(img, modeRGB)def rndChar():生成随机字母:return:return chr(random.randint(65, 90))def rndColor():生成随机颜色:return:return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))# 写文字font ImageFont.truetype(font_file, font_size)for i in range(char_length):char rndChar()code.append(char)h random.randint(0, 4)draw.text([i * width / char_length, h], char, fontfont, fillrndColor())# 写干扰点for i in range(40):draw.point([random.randint(0, width), random.randint(0, height)], fillrndColor())# 写干扰圆圈for i in range(40):draw.point([random.randint(0, width), random.randint(0, height)], fillrndColor())x random.randint(0, width)y random.randint(0, height)draw.arc((x, y, x 4, y 4), 0, 90, fillrndColor())# 画干扰线for i in range(5):x1 random.randint(0, width)y1 random.randint(0, height)x2 random.randint(0, width)y2 random.randint(0, height)draw.line((x1, y1, x2, y2), fillrndColor())img img.filter(ImageFilter.EDGE_ENHANCE_MORE)return img, .join(code)if __name__ __main__:# 1. 直接打开# img,code check_code()# img.show()# 2. 写入文件# img,code check_code()# with open(code.png,wb) as f:# img.save(f,formatpng)# 3. 写入内存(Python3)# from io import BytesIO# stream BytesIO()# img.save(stream, png)# stream.getvalue()# 4. 写入内存Python2# import StringIO# stream StringIO.StringIO()# img.save(stream, png)# stream.getvalue()pass 设置七天免登录功能 图片验证码account.py from django import forms from django.shortcuts import render, redirect, HttpResponse from app01 import models from app01.utils.bootstrap import BootStrapForm from app01.utils.encrypt import md5 from app01.utils.code import check_codeclass LoginForm(BootStrapForm):username forms.CharField(label用户名,widgetforms.TextInput,requiredTrue)password forms.CharField(label密码,widgetforms.PasswordInput(render_valueTrue),requiredTrue)code forms.CharField(label验证码,widgetforms.TextInput,requiredTrue)def clean_password(self):pwd self.cleaned_data.get(password)return md5(pwd)def login(request): 登录 if request.method GET:form LoginForm()return render(request, login.html, {form: form})form LoginForm(datarequest.POST)if form.is_valid():# 验证码的校验user_input_code form.cleaned_data.pop(code)code request.session.get(image_code, )if code.upper() ! user_input_code.upper():form.add_error(code, 验证码错误)return render(request, login.html, {form: form})# 验证成功获取到的用户名和密码1# 去数据库校验用户名和密码是否正确,获取用户对象admin_object models.Admin.objects.filter(**form.cleaned_data).first()if not admin_object:form.add_error(password, 用户名或密码错误)return render(request, login.html, {form: form})# 用户名和密码正确# 网站生成随机字符串写到用户浏览器的cookie中在写入到session中request.session[info] {id: admin_object.id, name: admin_object.username}request.session.set_expiry(60 * 60 * 24 * 7)return redirect(/admin/list/)return render(request, login.html, {form: form})from io import BytesIOdef image_code(request): 生成图片验证码 # 调用pillow函数生成图片img, code_string check_code()# 写入到自己的session中以便于后续获取验证码再进行校验)request.session[image_code] code_string# 给session设置60s超时request.session.set_expiry(60)stream BytesIO()img.save(stream, png)return HttpResponse(stream.getvalue())def logout(request): 注销 request.session.clear()return redirect(/login/)login.html !DOCTYPE html html langen headmeta charsetUTF-8titleTitle/titlelink relstylesheet href/static/plugins/bootstrap-3.3.5/css/bootstrap.cssstyle.account {width: 400px;border: 1px solid #dddddd;border-radius: 5px;box-shadow: 5px 5px 20px #aaa;margin-left: auto;margin-right: auto;margin-top: 100px;padding: 20px 40px;}.account h2 {margin-top: 10px;text-align: center;}/style /head body div classaccounth2用户登录/h2form methodpost novalidate{% csrf_token %}div classform-grouplabel用户名/label{{ form.username }}span stylecolor: red;{{ form.username.errors.0 }}/span/divdiv classform-grouplabel密码/label{{ form.password }}span stylecolor: red;{{ form.password.errors.0 }}/span/divdiv classform-grouplabel forid_code图片验证码/labeldiv classrowdiv classcol-xs-7{{ form.code }}span stylecolor: red;{{ form.code.errors.0 }}/span/divdiv classcol-xs-5img idimage_code src/image/code/ stylewidth: 125px;/div/div/divinput typesubmit value登 录 classbtn btn-primary/form /div /body /html
http://www.sczhlp.com/news/185191/

相关文章:

  • 上海网站开发技术最好公司电话h5成品网站
  • 怎么在网站挂黑链接网站建设方式
  • 网站建设与管理实验境外服务器租用
  • 网站搭建和网站开发seo推广绩效考核指标是什么
  • 安阳吧免费seo网站推广
  • 如何增加网站的访问量wordpress后台超慢
  • 怎么做网站促收录苏州做网站费用明细
  • 钓鱼网站制作教程网站初期seo怎么做
  • wordpress+站群软件wordpress图片更换
  • 用网站做简历2023中国互联网公司排行榜
  • 如何制作网站链接Wordpress显示成缩略图
  • 长沙企业网站模板小程序企业网站
  • Supabase:无需后端代码的 Web 开发完整解决方案
  • Halo RAG!
  • SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
  • 2025 木饰面源头厂家最新推荐榜单:21 年标杆企业领衔,背景墙/全屋 /格栅/碳晶板全品类最新推荐及选购指南
  • 怎样做网站海报建筑网站视频大全
  • 网站上传不了图片是什么原因免登录直接玩的游戏
  • 校园二手网站开发与设计任务书重庆云阳网站建设
  • 阿里云建设网站要什么官方网站建设建议
  • 佛山网站设计哪家便宜怎样做电影网站
  • 做网站什么语言最好百度下载免费官方安装
  • 全国购物网站排名拙人营造设计公司官网
  • 建设银行信用卡网站是多少php网站开发师
  • 哪有宝安网站推广vps运行wordpress
  • 域名注册网站哪个好辽宁省精神文明建设工作三大创建活动网站
  • 外贸多语言网站免费源码企业网站建设成本费用
  • 国家 住房城乡建设信用 网站dw是做静态网站还是动态的
  • 中信建设内部网站广州网站建设 粤icp
  • 东莞 网站建设 定制水综合信息网站建设方案