Django+xadmin实现教育网站系统

news/2024/5/10 0:17:06/文章来源:https://blog.csdn.net/weixin_43746433/article/details/106632575

文章目录

  • 环境配置与项目介绍
    • Django升级2.0+ 注意的点
    • app管理
    • 数据库设计
    • 注册model
    • 注册app目录
  • 5 xadmin搭建后台管理系统
    • 5-3 users app 的model注册
    • 5-5 xadmin全局配置
    • app.py 定义app后台名称
  • 第6章 用户注册功能实现
    • 6.1 登录表单验证
    • 6-6 session和cookie自动登录机制
    • 用户注册
    • 发送邮件
    • 激活用户
  • 第7章 课程机构功能实现
    • 7-3 课程机构列表页数据展示
      • Django 定义本地上传图片的路径
    • 渲染模板(使用后端配置)
    • 分页 pure_pagination
    • 7-7 Django modelform提交我要学习咨询
    • 7-9 机构详情展示
  • BUG

环境配置与项目介绍

  • 配置虚拟环境

在这里插入图片描述
在这里插入图片描述

Django升级2.0+ 注意的点

在这里插入图片描述

app管理

在这里插入图片描述

数据库设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注册model

  • django如果每个app注册后,需要admin显示,则在app/admin.py中注册,xadmin则为adminx.py
# course/adminx.pyimport xadminfrom .models import Course, Lesson, Video, CourseResource,BannerCourse
from organization.models import CourseOrgclass LessonInline(object):model = Lessonextra = 0class CourseResourceInline(object):model = CourseResourceextra = 0# Course的admin管理器
class CourseAdmin(object):'''课程'''list_display = [ 'name','desc','detail','degree','learn_times','students','get_zj_nums','go_to']   #显示的字段search_fields = ['name', 'desc', 'detail', 'degree', 'students']             #搜索list_filter = [ 'name','desc','detail','degree','learn_times','students']    #过滤model_icon = 'fa fa-book'            #图标ordering = ['-click_nums']           #排序readonly_fields = ['click_nums']     #只读字段exclude = ['fav_nums']               #不显示的字段# list_editable = ['degree','desc']# refresh_times = [3,5]                #自动刷新(里面是秒数范围)inlines = [LessonInline,CourseResourceInline]    #增加章节和课程资源style_fields = {"detail": "ueditor"}def queryset(self):# 重载queryset方法,来过滤出我们想要的数据的qs = super(CourseAdmin, self).queryset()# 只显示is_banner=True的课程qs = qs.filter(is_banner=False)return qsdef save_models(self):# 在保存课程的时候统计课程机构的课程数# obj实际是一个course对象obj = self.new_obj# 如果这里不保存,新增课程,统计的课程数会少一个obj.save()# 确定课程的课程机构存在。if obj.course_org is not None:#找到添加的课程的课程机构course_org = obj.course_org#课程机构的课程数量等于添加课程后的数量course_org.course_nums = Course.objects.filter(course_org=course_org).count()course_org.save()class BannerCourseAdmin(object):'''轮播课程'''list_display = [ 'name','desc','detail','degree','learn_times','students']search_fields = ['name', 'desc', 'detail', 'degree', 'students']list_filter = [ 'name','desc','detail','degree','learn_times','students']model_icon = 'fa fa-book'ordering = ['-click_nums']readonly_fields = ['click_nums']exclude = ['fav_nums']inlines = [LessonInline,CourseResourceInline]def queryset(self):#重载queryset方法,来过滤出我们想要的数据的qs = super(BannerCourseAdmin, self).queryset()#只显示is_banner=True的课程qs = qs.filter(is_banner=True)return qsclass LessonAdmin(object):'''章节'''list_display = ['course', 'name', 'add_time']search_fields = ['course', 'name']#这里course__name是根据课程名称过滤list_filter = ['course__name', 'name', 'add_time']class VideoAdmin(object):'''视频'''list_display = ['lesson', 'name', 'add_time']search_fields = ['lesson', 'name']list_filter = ['lesson', 'name', 'add_time']class CourseResourceAdmin(object):'''课程资源'''list_display = ['course', 'name', 'download', 'add_time']search_fields = ['course', 'name', 'download']list_filter = ['course__name', 'name', 'download', 'add_time']# 将管理器与model进行注册关联
xadmin.site.register(Course, CourseAdmin)
xadmin.site.register(BannerCourse, BannerCourseAdmin)
xadmin.site.register(Lesson, LessonAdmin)
xadmin.site.register(Video, VideoAdmin)
xadmin.site.register(CourseResource, CourseResourceAdmin)

注册app目录

在这里插入图片描述

5 xadmin搭建后台管理系统

5-3 users app 的model注册

  • 一般在admin中对model进行注册与显示的逻辑更改
    在这里插入图片描述

  • 显示字段 list_display = (‘action_time’, ‘user’, ‘ip_addr’, ‘str’, ‘link’)

  • 筛选 list_filter = [‘user’, ‘action_time’]

  • 搜索 search_fields = [‘ip_addr’, ‘message’]

  • 图标 model_icon = ‘fa fa-cog’

在这里插入图片描述

在这里插入图片描述

5-5 xadmin全局配置

# users/adminx.pyimport xadminfrom .models import EmailVerifyRecord,Banner
from xadmin import views# 创建xadmin的最基本管理器配置,并与view绑定
class BaseSetting(object):# 开启主题功能enable_themes = Trueuse_bootswatch = True# 全局修改,固定写法
class GlobalSettings(object):# 修改titlesite_title = 'imooc后台管理界面'# 修改footersite_footer = '科比的公司'# 收起菜单 将每个数据库的表收起menu_style = 'accordion'#xadmin中这里是继承object,不再是继承admin
class EmailVerifyRecordAdmin(object):# 显示的列list_display = ['code', 'email', 'send_type', 'send_time']# 搜索的字段search_fields = ['code', 'email', 'send_type']# 过滤list_filter = ['code', 'email', 'send_type', 'send_time']class BannerAdmin(object):list_display = ['title', 'image', 'url','index', 'add_time']search_fields = ['title', 'image', 'url','index']list_filter = ['title', 'image', 'url','index', 'add_time']xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)
xadmin.site.register(Banner,BannerAdmin)# 将基本配置管理与view绑定
xadmin.site.register(views.BaseAdminView,BaseSetting)# 将title和footer信息进行注册
xadmin.site.register(views.CommAdminView,GlobalSettings)

app.py 定义app后台名称

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将app.py 的配置 注册到init.py中

第6章 用户注册功能实现

6.1 登录表单验证

from django import forms
from captcha.fields import CaptchaField
class LoginForm(forms.Form):'''登录验证表单'''username = forms.CharField(required=True)password = forms.CharField(required=True,min_length=5)
class LoginView(View):'''用户登录'''def get(self,request):return render(request, 'login.html')def post(self,request):# 实例化login_form = LoginForm(request.POST)if login_form.is_valid():# 获取用户提交的用户名和密码user_name = request.POST.get('username', None)pass_word = request.POST.get('password', None)# 成功返回user对象,失败Noneuser = authenticate(username=user_name, password=pass_word)# 如果不是null说明验证成功if user is not None:if user.is_active:# 只有注册激活才能登录login(request, user)return HttpResponseRedirect(reverse('index'))else:return render(request, 'login.html', {'msg': '用户名或密码错误', 'login_form': login_form})# 只有当用户名或密码不存在时,才返回错误信息到前端else:return render(request, 'login.html', {'msg': '用户名或密码错误','login_form':login_form})# form.is_valid()已经判断不合法了,所以这里不需要再返回错误信息到前端了else:return render(request,'login.html',{'login_form':login_form})

6-6 session和cookie自动登录机制

在这里插入图片描述

设置redis Djangosession
这里采用默认的mysql保存

用户注册

from django.contrib.auth.hashers import make_passwordclass RegisterView(View):'''用户注册'''def get(self,request):register_form = RegisterForm()return render(request,'register.html',{'register_form':register_form})def post(self,request):register_form = RegisterForm(request.POST)if register_form.is_valid():user_name = request.POST.get('email', None)# 如果用户已存在,则提示错误信息if UserProfile.objects.filter(email = user_name):return render(request, 'register.html', {'register_form':register_form,'msg': '用户已存在'})pass_word = request.POST.get('password', None)# 实例化一个user_profile对象user_profile = UserProfile()user_profile.username = user_nameuser_profile.email = user_nameuser_profile.is_active = False# 对保存到数据库的密码加密user_profile.password = make_password(pass_word)user_profile.save()send_register_eamil(user_name,'register')return render(request,'login.html')else:return render(request,'register.html',{'register_form':register_form})

发送邮件

# apps/utils/email_send.pyfrom random import Random
from django.core.mail import send_mailfrom users.models import EmailVerifyRecord
from RcOnline.settings import EMAIL_FROM# 生成随机字符串
def random_str(random_length=8):str = ''# 生成字符串的可选字符串chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'length = len(chars) - 1random = Random()for i in range(random_length):str += chars[random.randint(0, length)]return str# 发送注册邮件
def send_register_eamil(email, send_type="register"):# 发送之前先保存到数据库,到时候查询链接是否存在# 实例化一个EmailVerifyRecord对象email_record = EmailVerifyRecord()# 生成随机的code放入链接if send_type == 'update_email':code = random_str(4)else:code = random_str(16)email_record.code = codeemail_record.email = emailemail_record.send_type = send_typeemail_record.save()# 定义邮件内容:email_title = ""email_body = ""if send_type == "register":email_title = "NBA注册激活链接"email_body = "请点击下面的链接激活你的账号: http://127.0.0.1:8000/active/{0}".format(code)# 使用Django内置函数完成邮件发送。四个参数:主题,邮件内容,从哪里发,接受者listsend_status = send_mail(email_title, email_body, EMAIL_FROM, [email])# 如果发送成功if send_status:passelif send_type == "forget":email_title = "NBA找回密码链接"email_body = "请点击下面的链接找回你的密码: http://127.0.0.1:8000/reset/{0}".format(code)# 使用Django内置函数完成邮件发送。四个参数:主题,邮件内容,从哪里发,接受者listsend_status = send_mail(email_title, email_body, EMAIL_FROM, [email])# 如果发送成功if send_status:passelif send_type == "update_email":email_title = "NBA邮箱修改验证码"email_body = "你的邮箱验证码为{0}".format(code)# 使用Django内置函数完成邮件发送。四个参数:主题,邮件内容,从哪里发,接受者listsend_status = send_mail(email_title, email_body, EMAIL_FROM, [email])# 如果发送成功if send_status:pass

settings

EMAIL_HOST = "smtp.qq.com"  # SMTP服务器主机
EMAIL_PORT = 25             # 端口
EMAIL_HOST_USER = ""       # 邮箱地址
EMAIL_HOST_PASSWORD = ""    # 授权码
EMAIL_USE_TLS = False
EMAIL_FROM = ""            # 邮箱地址

激活用户

# 激活用户
class ActiveUserView(View):def get(self, request, active_code):# 查询邮箱验证记录是否存在all_record = EmailVerifyRecord.objects.filter(code = active_code)if all_record:for record in all_record:# 获取到对应的邮箱email = record.email# 查找到邮箱对应的useruser = UserProfile.objects.get(email=email)user.is_active = Trueuser.save()# 验证码不对的时候跳转到激活失败页面else:return render(request,'active_fail.html')# 激活成功跳转到登录页面return render(request, "login.html", )

第7章 课程机构功能实现

7-3 课程机构列表页数据展示

Django 定义本地上传图片的路径

  • 在settings.py定义

    # 上传图片
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR,'media')
    
  • 在root目录下设置media文件夹

  • 在models.py中定义文件路径

    class CourseOrg(models.Model):
    ORG_CHOICES = (("pxjg", u"培训机构"),("gx", u"高校"),("gr", u"个人"),
    )
    name = models.CharField('机构名称',max_length=50)
    desc = models.TextField('机构描述')
    category = models.CharField(max_length=20, choices=ORG_CHOICES, verbose_name=u"机构类别", default="pxjg")
    click_nums = models.IntegerField('点击数',default=0)
    tag = models.CharField('机构标签',max_length=10,default='全国知名')
    fav_nums = models.IntegerField('收藏数',default=0)
    students = models.IntegerField("学习人数",default=0)
    course_nums = models.IntegerField("课程数",default=0)
    image = models.ImageField('logo',upload_to='org/%Y/%m',max_length=100)
    address = models.CharField('机构地址',max_length=150,)
    city = models.ForeignKey(CityDict,verbose_name='所在城市',on_delete=models.CASCADE)
    add_time = models.DateTimeField(default=datetime.now)
    
    • 目录结构,(其实应该将文件上传到云 or 改成时间戳的名称存储)
      在这里插入图片描述

渲染模板(使用后端配置)

  • 1.settings.py

    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',#添加图片处理器,为了在课程列表中前面加上MEDIA_URL'django.template.context_processors.media',],},},
    ]
    
  • 2.设置图片路径,使用{{ MEDIA_URL }}{{ course_org.image }}

     {% for course_org in all_orgs.object_list %}<dl class="des difdes"><dt><a href="{% url 'org:org_home' course_org.id %}"><img width="200" height="120" class="scrollLoading"data-url="{{ MEDIA_URL }}{{ course_org.image }}"/></a></dt><dd><div class="clearfix"><a href="org-detail-homepage.html"><h1>{{ course_org.name }}</h1><div class="pic fl"><img src="{% static 'images/authentication.png' %}"/><img src="{% static 'images/gold.png' %}"/></div></a></div><ul class="cont"><li class="first"><p class="pic9">课程数:<span>1</span></p><p class="c7">学习人数:<span>1000</span></p></li><li class="c8" style="padding-left:18px;">北京市海淀区中关村北大街</li><li class="pic10" style="padding-left:18px;">经典课程:<a href="/diary/19/">c语言基础入门</a><a href="/diary/16/">数据库基础</a></li></ul></dd><div class="buy start_groupbuy jsShowPerfect2" data-id="22"><br/>联系<br/>服务</div></dl>
    {% endfor %}
    

分页 pure_pagination

pure_pagination 对Django的分页paginate进行封装, 在settings.py的INSTALLED_APPS设置pure_pagination

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','course','operation','organization','users','xadmin','crispy_forms','captcha','pure_pagination','DjangoUeditor',
]
from pure_pagination import Paginator, EmptyPage, PageNotAnIntegerclass OrgView(View):'''课程机构'''def get(self, request):# 所有课程机构all_orgs = CourseOrg.objects.all()# 所有城市all_citys = CityDict.objects.all()# 机构搜索功能search_keywords = request.GET.get('keywords', '')if search_keywords:# 在name字段进行操作,做like语句的操作。i代表不区分大小写# or操作使用Qall_orgs = all_orgs.filter(Q(name__icontains=search_keywords) | Q(desc__icontains=search_keywords))# 城市筛选city_id = request.GET.get('city','')if city_id:all_orgs = all_orgs.filter(city_id=int(city_id))# 类别筛选category = request.GET.get('ct','')if category:all_orgs = all_orgs.filter(category=category)# 对课程机构进行分页# 尝试获取前台get请求传递过来的page参数# 如果是不合法的配置参数默认返回第一页try:page = request.GET.get('page', 1)except PageNotAnInteger:page = 1# 这里指从allorg中取五个出来,每页显示2个,可以在settings中设置分页显示数量p = Paginator(all_orgs, 2, request=request)orgs = p.page(page)return render(request, "org-list.html", {"all_orgs": orgs,"all_citys": all_citys,"org_nums": org_nums,'city_id':city_id,"category": category,'hot_orgs':hot_orgs,'sort':sort,})
   <div class="pageturn"><ul class="pagelist">{% if all_courses.has_previous %}<li class="long"><a href="?{{ all_courses.previous_page_number.querystring }}">上一页</a></li>{% endif %}{% for page in all_courses.pages %}{% if page %}{% ifequal page all_courses.number %}<li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>{% else %}<li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>{% endifequal %}{% else %}<li class="none"><a href="">...</a></li>{% endif %}{% endfor %}{% if all_courses.has_next %}<li class="long"><a href="?{{ all_courses.next_page_number.querystring }}">下一页</a></li>{% endif %}</ul></div>

7-7 Django modelform提交我要学习咨询

# organization/forms.pyimport re
from django import forms
from operation.models import UserAskclass UserAskForm(forms.ModelForm):class Meta:model = UserAskfields = ['name', 'mobile', 'course_name']def clean_mobile(self):"""验证手机号码是否合法"""mobile = self.cleaned_data['mobile']REGEX_MOBILE = "^1[358]\d{9}$|^147\d{8}$|176\d{8}$"p = re.compile(REGEX_MOBILE)if p.match(mobile):return mobileelse:raise forms.ValidationError(u"手机号码非法", code="mobile_invalid")
class AddUserAskView(View):"""用户添加咨询"""def post(self, request):userask_form = UserAskForm(request.POST)if userask_form.is_valid():user_ask = userask_form.save(commit=True)# 如果保存成功,返回json字符串,后面content type是告诉浏览器返回的数据类型return HttpResponse('{"status":"success"}', content_type='application/json')else:# 如果保存失败,返回json字符串,并将form的报错信息通过msg传递到前端return HttpResponse('{"status":"fail", "msg":"添加出错"}', content_type='application/json')

7-9 机构详情展示

Django orm反向查找 course_org.course_set.all()[:4],利用课程机构查找课程

class OrgHomeView(View):'''机构首页'''def get(self,request,org_id):current_page = 'home'# 根据id找到课程机构course_org = CourseOrg.objects.get(id=int(org_id))course_org.click_nums += 1course_org.save()# 判断收藏状态has_fav = Falseif request.user.is_authenticated:if UserFavorite.objects.filter(user=request.user, fav_id=course_org.id, fav_type=2):has_fav = True# 反向查询到课程机构的所有课程和老师all_courses = course_org.course_set.all()[:4]all_teacher = course_org.teacher_set.all()[:2]return render(request,'org-detail-homepage.html',{'course_org':course_org,'all_courses':all_courses,'all_teacher':all_teacher,'current_page':current_page,'has_fav':has_fav,})

BUG

集成DjangoUeditor时,出现错误,错误提示为:

from widgets import UEditorWidget,AdminUEditorWidget
ImportError: No module named ‘widgets’

经查发现,DjangoUeditor是基于Python 2.7的,对Python3的支持有问题。导致widgets.py文件出错,不能import。解决方法为修改widgets.py或者采用网上修改好的版本

参考
https://blog.csdn.net/zhch1979/article/details/104684122/

https://blog.csdn.net/weixin_43063753/article/details/87466738

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_770936.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django+xadmin实现教育网站系统②

文章目录第10章 个人中心和全局搜索功能实现全局搜索修改头像第11章 首页、全局功能细节和404以及500页面配置第12章 常见web攻击及防范sql注入12-2 xss攻击原理及防范12-3 csrf攻击与防范第13章 xadmin的进阶开发13-1 userprofile注册以及django的权限管理13-3 model_icon, 只…

视频网站解决带宽问题(总结)

自己搜来的一些方案&#xff0c;汇总下供自己学习吧 1.大带宽是重中之重 所有了解视频类应用的人都知道&#xff0c;视频网站的带宽才是重中之重。在线视频播放网站每天都会产生巨额的流量&#xff0c;每个客户都会占据非常大的带宽。如果带宽不够就会出现用户播放卡顿&#…

php投票网站教程,PHP之投票联系

1.建立数据库表1&#xff1a;DiaoYanTiMu表2&#xff1a;DiaoYanXuanXiang2.页面页面1&#xff1a;投票首页无标题文档#fanhui{ display:none}$db new MySQLi("localhost","root","123","mydb");$sql "select * from diaoyanti…

网站页面左右_建设一个普通的网站需要多少钱?就是一个展示型的公司网站。...

这个问题在行业内是没有准确定义的&#xff0c;每一个建站公司在面对不同的客户需求&#xff0c;都会有不同的报价模式&#xff0c;而影响价格的因素有很多&#xff0c;但无疑建站成员所拥有的“宝贵经验”往往是最贵的&#xff0c;这也是建站公司相互报价差距巨大的原因。要想…

java页面加速_为你的网站加速

我的博客刚成立也是不久&#xff0c;所以现在我关注了很多中小博客站点&#xff0c;发现很多站点打开速度很慢&#xff0c;甚至有一些网站出现打不开的情况。网站运行不稳定&#xff0c;可能和使用的服务器有关系&#xff0c;因为很多人都图方便&#xff0c;为了不备案直接使用…

linux 重启命令nginxed,Nginx转发,部署网站相关linux命令

进入目录cd /etc/nginx/sites-available进入文件defaultsudo vim default;编辑a鼠标右键粘贴退出编辑Esc保存:wq重启Nginx服务sudo service nginx restart清空default里面的内容sudo sh -c encho "" >default创建manage-front文件&#xff0c;并复制cib-front到ma…

电子病历模板编辑器_这几个邮件模板网站,帮助提升工作效率

AUTOKLOSE: 一些免费的邮件正文模板。Autopilot Templates:ree customer journey templates for marketing automationBEE TEMPLATES for GMAIL: 可编辑Gmail邮件模板。COLD EMAIL TEMPLATE: 一系列营销邮件模板。Contactually: 不知道邮件内容怎么写&#xff1f;参考下这些邮件…

关于ssm框架的外文文献及译文_使用彩云小译,翻译外文网站实现双语对照

彩云小译扩展&#xff0c;实现外语网页的翻译功能&#xff0c;一段原文一段译文&#xff0c;让查阅外文资料可以随心所欲。整理&排版 | idea君 &#xff0c;预计阅读时间 | 3分钟 文章意在学习交流分享&#xff0c;如有侵权请联系删除 封面&#xff1a;http://www.pexels.c…

网站index.php怎么关联其余,thinkphp隐藏index.php/home并允许访问其他模块的实现方法...

想要达成的效果很简单&#xff0c;我有两个模块&#xff0c;Home、Wechat。http://localhost/index.php/home/index/index 缩短为&#xff1a; http://localhost/index/indexhttp://localhost/index.php/wechat/index/index 缩短为&#xff1a; http://localhost/wechat/index/…

php5.2.8升级,UWA2.X通用建站升级程序

UWA2.X通用建站升级程序是一款基于PHP和MySQL开发的通用建站系统&#xff0c;程序简洁、灵活而具备强大的扩展性&#xff0c;将是您轻松建站的首选利器。采用XML名字空间风格核心模板&#xff1a;模板全 部使用文件形式保存&#xff0c;对用户设计模板、网站升级转移均提供很大…

google android开发者网站,谷歌上线 Fuchsia OS 开发者网站

原标题&#xff1a;谷歌上线 Fuchsia OS 开发者网站谷歌自研的操作系统 Fuchsia OS 又有新动作了。据了解&#xff0c;谷歌近日悄悄地上线了 Fuchsia OS 的开发者网站 https://fuchsia.dev/。谷歌表示&#xff0c;上线 fuchsia.dev 是为了让开发者更好地参与 Fuchsia OS 的开发…

如何自制网页服务器,如何自己制作网站?如何制作自己的网页?

如何自己制作网站?如何制作自己的网页?首先&#xff0c;你是非开发者&#xff0c;你需要知道做一个网页要采取哪些步骤。下面一起来看看吧!简单来说&#xff0c;网页制作需要的内容如下:页面设计、前端开发、后端开发(如果只是简单的介绍页面或者是不经常更改的页面)&#xf…

我的世界服务器换披风的网站,我的世界正版披风怎么换|或

【我的世界评测】我的世界正版披风怎么换。那下面给大家分享的则是我的世界正版中更换披风的教程哦~那到底怎么更换披风呢&#xff1f;那下面就给大家详细的介绍一下吧&#xff01;如果你有心仪的作品或者心得分享的话&#xff0c;欢迎来游戏园投稿&#xff0c;大家可以点击>…

计算机安全可信站点,怎样看网站是否安全?教你从地址栏上分辨网站是否真安全...

当网民有SSL证书保护的加密页面时&#xff0c;地址栏网址也会由“http”自动变成“https”。如同金色安全锁标记一样&#xff0c;我们此时提交的信息得到了安全加密保护。不知道平时大家在日常上网时有没有发现观察过有的网站开头是http&#xff0c;而有的则是https。为何会有这…

帮程序员减压放松的 10 个良心网站

同学们工作之余&#xff0c;不妨放下微博跟朋友圈&#xff0c;来这10个网站感受一下看着就醉了的情境&#xff1a;「念完往上一推音乐键&#xff0c;我往后一靠&#xff0c;潮乎乎的软皮耳机里头&#xff0c;音乐排山倒海。」今天推荐的网站&#xff0c;利用代入感强的图片与音…

来,了解一下90年代的网站

来自&#xff1a;www.sohu.com/a/240853435_66877020 年对于互联网来说是很长的一段时间&#xff0c;网页设计在此期间也走过了很长的路&#xff0c;我们现在回头看&#xff0c;几乎不敢相信我们曾经设计过这种东西&#xff01;▎1. Penny JuicePenny Juice 是一款为儿童制作的…

网站 HTTP 升级 HTTPS 完全配置手册

作者&#xff1a;葡萄城技术团队链接&#xff1a;https://my.oschina.net/powertoolsteam/blog/1862967昨天&#xff0c;所有使用Google Chrome稳定版的用户迎来了v68正式版首个版本的发布&#xff0c;详细版本号为v68.0.3440.75&#xff0c;上一个正式版v67.0.3396.99发布于6月…

来膜拜下 Google 的全球化网站架构

这是 Google SRE 工程师在2018年5月的一篇分享。本文大致的介绍了 Google 整个网站的 infrastructure&#xff0c;以及代码发布流程。而更详细的细节&#xff0c;可以阅读 Google 出的《Site Reliability Engineering》这本书。原视频 Google Tech Talk 的链接&#xff1a;http…

因在公司上不正经网站,我没过试用期…

本文转载自程序员石头&#xff0c;作者 石头哥 最近浏览到一个知乎问题&#xff1a;某运营同学在试用期期间因为在工作期间上了某个网站&#xff0c;导致试用期不过。 前两天还看到不少推文&#xff0c;大意是&#xff1a;看小电影前一定要注意网址是不是 HTTPS 的&#xff0c;…

点击“我不是机器人”后,网站到底怎么知道你真的是人?

本文转载自腾讯网&#xff0c;大部分人可能都被Google要求做过这样奇怪的保证&#xff1a; “我不是机器人”。 只要你经常使用一些国外的网站&#xff0c;它就会隔三差五地弹出这个对话框&#xff0c;要求你点击来“声明”自己不是机器人。 以前这种“证明自己是人”的环节里…