Django+xadmin打造线上教育平台知识点拾遗(三)Ericnan

1)在一开始设计表类型结构时,有部分表字段定义的是文件或图片类型,会有一个上传路径,如:

上传路径upload_to:org/%Y/%m是个相对路径,意思是上传到后台的图片/文件,放到org文件夹/Y(年份)文件夹/m文件夹下,但绝对路径没给,不知道具体放的实际位置是哪,

这个时候需要在django中配置静态文件的处理方式,在setting中配置:上传的文件会自动存放到到/media/org/Y/m中

#settings.py#设置上传文件的路径MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE_DIR,'media')#指定根目录

2)关于文件/图片从xadmin上传到django项目中指定的文件夹的问题已经解决,接下来说在HTML模板中使用这些文件/图片,一般有两种方式

用第二种方式需要配置:

1)setting配置:上述已说明,配置上传文件路径

2)setting中TEMPLATES下的OPTIONS要加入这一句:用于识别前端模板MEDIA_URL路径,直接转换成:/media/,实现{{MEDIA_URL}}{{course_org.image}}→/media/org/2018/8/***.png的转换

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','django.template.context_processors.media',#新增,用于media处理],},},]

3)url.py的配置:配置静态文件,是因为前端根据(2)中转换成的/media/org/2018/8/***.png路径,到url中serve配置好的路径找对应MEDIA_ROOT(根路径)下的media文件夹,即找到media/org/2018/8/***.png,然后显示到页面

fromdjango.urlsimportpath,include,re_pathfromdjango.views.staticimportserve#用于处理静态文件fromMxOnline.settingsimportMEDIA_ROOT#media路径urlpatterns=[#处理静态文件,使用Django自带serve,传入setting中路径配置MEDIAROOT,让它根据路径找re_path(r'^media/(P.*)',serve,{"document_root":MEDIA_ROOT}),]

一般推荐第二种,方便维护

views.py:

fromdjango.shortcutsimportrender,redirectfromorganizationimportmodelsfromdjango.core.paginatorimportPaginator,PageNotAnInteger,EmptyPage#Createyourviewshere.deforg_list(request):"""课程机构列表"""#所有课程机构all_orgs=models.CourseOrg.objects.all()orgs_count=all_orgs.count()#所有城市all_citys=models.CityDict.objects.all()#开始分页功能paginator=Paginator(all_orgs,5)page=request.GET.get('_page',1)try:orgs=paginator.page(page)#当前页显示的5个数据print(orgs)exceptPageNotAnInteger:#Ifpageisnotaninteger,deliverfirstpage.orgs=paginator.page(1)exceptEmptyPage:#Ifpageisoutofrange(e.g.9999),deliverlastpageofresults.orgs=paginator.page(paginator.num_pages)#paginator.num_pages:总页数,即返回最后一页returnrender(request,'organization/org-list.html',locals())ViewCode

app内新建templatetags包,在里面新建online_tag.py文件,用于自定义标签,返给HTML模板渲染:

HTML界面只需要一个导入跟一句代码便能实现分页功能:

{%loadmxonline_tags%}{#分页#}{%render_paginatororgs%}

1.1、创建Form类

1.2、views.py函数处理:

1.3、HTML页面:

Title{%csrf_token%}

{{obj.user}}{{obj.user.errors.0}}

{{obj.pwd}}{{obj.pwd.errors.0}}

{{obj.email}}{{obj.email.errors.0}}

{{obj.city}}{{obj.city.errors.0}}

{{obj.gender}}{{obj.gender.errors.0}}

{{obj.abc}}{{obj.abc.errors.0}}

ViewCode

1.4、自定义验证:

1)clean_%s(self)#clean_+要审查的那个字段

这种是验证单个字段的:

2)c.clean(self)#重写clean方法

这种可以验证多个字段:

demo:

2.1、创建ModelForm类:

ModelForm的自定义验证方法跟Form的自定义验证方法是一样的,内置字段名也基本一致,可以参考Form类的介绍,如:

数据以字典形式存于cleaned_data中,错误以字典形式存于errors中

ModelForm与Form的不同点:

ModelForm:字段不需要自己写,与model中定义的数据表相通、一致;验证数据通过后可以通过.save()直接保存

From:字段需要自己手动添加,只验证字段是否合法,数据保存之类需要手动保存

django项目,自定义404、500页面时,需要项目setting中配置:

DEBUG=False,

ALLOWED_HOSTS=['*',](或ALLOWED_HOSTS=['127.0.0.1','localhost','192.168.1.155']等),表示允许访问本项目的地址配置完这两个,就可以自定义全局404、500页面了但,当DEBUG设置为False,此时setting中设置的静态文件路径,django均不会自动帮你配置,当HTML模板中需要用到setting中设置的静态文件路径时,一种是直接指定绝对路径:/static/image/xx.png;另一种是手动配置静态文件

路径:

首先,setting中配置是:

STATIC_URL='/static/'STATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),]MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE_DIR,'media')然后需要在urls.py中配置:

DEBUG=True时,static路径在url下不需要配置

fromdjango.views.staticimportservefromMxOnline.settingsimportMEDIA_ROOT,STATICFILES_DIRSurlpatterns=[#处理静态文件,使用Django自带serve,传入setting中路径配置MEDIAROOT,让它根据路径找media下的文件re_path(r'^media/(P.*)',serve,{"document_root":MEDIA_ROOT}),#需要手动static_dirs路径,然后使用serve根据路径帮忙找到static下的文件re_path(r'^static/(P.*)',serve,{"document_root":STATICFILES_DIRS[0]}),]

好了,准备工作完成了,开始全局404、500页面操作

1、404页面:

views:

fromdjango.shortcutsimportrender_to_responsedefpag_not_found(request):#全局404处理函数response=render_to_response('404.html')response.status_code=404returnresponse

urls:

#全局404页面配置handler404='MxOnline.views.pag_not_found'

HTML页面:

2、500页面:

fromdjango.shortcutsimportrender_to_responsedefpage_error(request):#全局500处理函数fromdjango.shortcutsimportrender_to_responseresponse=render_to_response('500.html')response.status_code=500returnresponse

#全局500页面配置handler500='MxOnline.views.page_error'

注意:2.0版本,测试中发现:只要将debug设置为False,将自定义404、500(必须命名:404.html、500.html)页面导入到项目中的templates中,当url访问出错(404、500状态码)时,会自动调用404.html、500.html页面

sql注入的危害

sql注入案例(使用原生sql语句):

select*fromuserwherename='${name}'

当用户输入name值为:'or1='1时,上述select代码变成:

select*fromuserwherename=''or1='1'

此时判断逻辑是符合要求的。类似这种就是sql注入。

xss跨站脚本攻击(CrossSiteScripting)的危害

xss攻击流程:

xss攻击防护

普通文本xxs攻击防护:

第二种是在Django后台导入escape过滤器(fromdjango.template.defaultfiltersimportescape),然后将前端用户提交上来的数据进行转义(假如包含js等脚本代码)再存入数据库中,这样js脚本等也都会被转义,再从数据库中取出,然后到前端展示,即使使用了safe过滤器也不会被渲染为js脚本执行。

富文本xxs攻击防护:

对于富文本提交的数据,肯定会包含一些html标签操作(如:字体颜色、字体样式等),这种要返回前端渲染展示时,就需要我们使用safe过滤器来将其标记为安全的,这样才能显示出富文本样式。这种情况就存在着xss脚本攻击的危险。但我们可以在后端对数据进行一些额为处理,比如:将需要的标签保留下来,把不需要的标签进行转义或移除掉。在python中,有一个库可以专门用来处理这个事情,具体解决方法如下:

1)首先安装bleach库:pipinstallbleach

bleach库是用来清理包含HTML格式字符串的库。他可以指定哪些标签需要保留,哪些标签是需要过滤掉的,也可以指定标签上哪些属性是可以保留,哪些属性是不需要的。demo:

ALLOWED_TAGS中,默认允许的标签:a、abbr、acronym、b、blockquote、code、em、i、li、ol、ul、strong

demo中方法介绍:

tag:表示允许哪些标签

attributes:表示标签中允许哪些属性

ALLOWED_TAGS:这个变量默认定义l一些允许的标签

ALLOWEND_ATTRIBUTES中:这个变量默认定义了一些允许的属性

bleach.clean方法:对提交的数据进行过滤

csrf跨站请求伪造(Cross-siterequestforgery)的危害

CSRF攻击流程:

CSRF攻击防范:

在form里面加上{%csrf_token%}

clickjacking攻击又称点击劫持攻击,是一种在网页中将恶意代码等隐藏在看似无害的内容(如按钮)之下,并诱惑用户点击的手段。

攻击场景:

1、给用户发邮件,诱惑用户点开,当用户点开的时候其实链入的是一购物网站等等

2、用户进入到一个网页中,里面包含一个非常有诱惑力的按钮A,但是这个按钮上面浮了一个透明的iframe标签,这个iframe标签加载的是另外一个网页,并且这个网页的某个按钮和原网页中的按钮重合。所以你在点击按钮A的时候,实际上点击的是通过iframe加载的另外一个网页的按钮。

clickjacking防护:

场景1的情形是无法避免的。而像场景2是可以避免的,只要设置该网站不允许使用iframe被加载到其他网页中就可以了。我们可以通过在响应头设置X-Framen-Option来设置这种操作。X-Frame-Option可以设置以下三个值:

DENY:不让任何网页使用iframe加载我这个页面SAMEORIGIN:只允许在相同域名下使用iframe加载我的页面ALLOW-FROMorigin:允许任何网页通过iframe加载我这个网页在Django中,使用中间件django.middleware.clickjacking.XFrameOptionsMiddleware可以帮我们堵上这个漏洞,这个中间件设置了X-Frame-Option为SAMEORIGIN,也就是只有在自己的网站下才可以使用iframe加载这个网页,这样就可以避免其他别有心机的网页去通过iframe加载我们的网页了。

THE END
1.常见的几个主流线上社交网站平台类型解析建站经验网站运营社交平台已然成为当今互联网生活不可或缺的一部分。下面为大家介绍常见的几个主流线上社交网站平台类型,有兴趣的朋友可以过来了解一下哦 交友网站好做吗,可以做哪些交友网站?这是最近听到最多的疑问,那么交友网站可以怎么做,需要做怎么,那么首先要从类型说起,就在这里跟大家说下常见的几个社交网站类型简单分析。 https://www.jb51.net/yunying/515468.html
2.线上授课用什么软件比较好线上网课平台哪个好疫情不稳定,还随时可能爆发,许多学生有时候不得不因为疫情而在家学习,老师的工作也不得不放在线上办公。互联网时代很发达,那么选择一款软件作为介质,链接学生与老师,那么线上学习平台类型的软件就很适合了。今天就给大家带来2024年免费,学生老师都一致好评的线上学习https://www.7k7k7.com.cn/hj/xsxxptrjdq_18.html
3.如何更好的运营酒店线上平台,深入了解OTA运营在当今时代,酒店与我们的生活息息相关!无论是出差或是旅行都离不开住酒店,越来越多人的选择通过OTA平台预订酒店。 在现在这个时代背景下,我们不得不承认:酒店OTA运营,已成为绝大多数酒店最合适的方式。那么如何在激烈的竞争中脱颖而出,如何更好的运营自己的线上平台,带你深入了解OTA运营。 https://www.jiudianrong.com/newsdetail/id/12062.html
4.关于开展第136届广交会线上平台参展组织事宜的通知通知一、关于线上平台参展企业类型及参展流程 9月16日起,广交会线上参展申请全年持续开放,企业可随时通过线上平台云展厅管理系统填报企业资质信息,提交线上参展申请。为支持更多企业利用广交会线上平台拓市场,第136届广交会线上平台参展企业拓展至以下三类: (一)第136届广交会线下展参展企业及联营企业。联营企业需已注册易捷https://www.shantou.gov.cn/swj/gjh/tz/content/post_2370355.html
5.线上美容平台有哪些线上美容平台有哪些平台对于"线上美容平台有哪些"这个问题感兴趣的朋友应该很多,这个也是目前大家比较关注的问题,那么下面小好小编就收集了一些"线上美容平台有哪些"相关软件,来分享给大家希望能够帮助到你哦。 1.线上赛车软件类型:安卓APP 软件页面:https://duote.com/android/602163.html点击下载 https://www.duote.com/tech/rjxz/456678.html
6.苏州昆山首个类型化纠纷诉调对接线上平台发布央广网苏州9月2日消息 在9月1日上午召开的昆山金改区线上调解“金e站”发布暨金融纠纷多元化解工作座谈会上,由市人民法院推出的昆山市首个类型化纠纷诉调对接线上平台“金e站”正式亮相。苏州市中级人民法院党组副书记、副院长石水根,昆山市副市长曹晔出席活动。 http://js.cnr.cn/qxlb/20210902/t20210902_525588106.shtml
7.按照平台类型的不同,可将互联网银行线上运营模式分为两种,基于按照平台类型的不同,可将互联网银行线上运营模式分为两种,基于个人的线上运营模式和基于小微企业的线上运营模式。 A、正确 B、错误 点击查看答案进入小程序搜题 你可能喜欢 关于break和continue语句,以下选项正确的是()。 A.使用双重循环语句允许while与do.while语句嵌套for语句,但不允许for嵌套while与do.while结https://m.ppkao.com/wangke/daan/c0023aeaf89047e6aac4a49cff685565
8.快手平台给达人开票新增计费项,如何操作?如果快手商家在充值达人保证金时缴纳了手续费、因违反平台规则向平台缴纳了违约金,那么您就可以线上申请平台给您开具相应金额的发票啦~ 一、功能介绍 1.1 计费类型 发票管理功能支持您查看以下费用月账单,支持您按月账单维度申请开具发票: 注意: 开票时间区间统一为结算时间,开票最小周期为“自然月”。达人可以在10号https://www.shuaishou.com/school/infos74622.html
9.有几种电商平台系统的类型?随着互联网的快速发展,人们在网上购物也越来越便利,从而也进一步促进了各大电商平台的发展。 图片来源:123rf.com.cn 随着互联网的快速发展,人们在网上购物也越来越便利,从而也进一步促进了各大电商平台的发展。那么对于电商平台系统来说,一共有几种类型呢? https://www.cifnews.com/article/77420
10.教育类网页设计/在线教育平台线上线下网站建设方案教育类可以是宣传,也可以是做线上教育的。不同类型教育类网站在设计上是有区别的,如果是宣传的话,主要是起到展示的作用。如果是做线上教育的,主要是引导课程的购买。那么如何进行教育类网页设计呢? 1,如果是宣传型的教育类网页,那么首先是确定客户群体。教育的群体不同,会大大影响到网站设计的风格。如果面向的群https://www.bunze.com/websolution/802.html
11.现在o2o的平台有哪些,什么是o2o?O2O营销模式的四种类型 (一)O2O营销模式:先线上后线下 先线上后线下,即是由企业搭建一个线上平台作为入口和依托,导入线下商业流进行交易和营销,同时用户还能到线下享受该有的服务和体验。平台的建立是O2O运转的基础,必须具备促使线下线上互动的能力和超强的资源转化能力。 https://www.keloop.cn/information/art16400.html
12.电商平台的模式类型都有哪些?二、线上线下深入融合的产物——O2O 如果说以前的电商平台模式大部分都是在冲击传统商业模式和传统企业,那么近几年出现的Online to Offline,及O2O模式则给传统商业带来了强大的发展助力。在美团、口碑这些O2O电商平台,消费者可以直接在线上购买或预定,然后到线下实体店去消费,平台为店家带去了源源不断的客源。 https://m.92hi.com/yunying/show_4361.html
13.企业活动直播平台有哪些类型和平台?企业活动直播平台是指为企业提供举办线上活动直播的服务和功能的平台。这些平台不仅可以实现活动内容的在线直播,还可以提供互动功能,方便企业与观众进行实时互动。下面将介绍企业活动直播平台的类型和一些常见的平台。 一、企业活动直播平台的类型: 1、 专业直播平台:这类平台专注于提供高质量、稳定的直播服务,支持大规模https://www.263.net/blog/5683.html
14.线上课程类型主要有哪几种?近年来线上市场异常活跃,尤其是视频类课程深受欢迎,为了抢占线上市场,越来越多的平台和机构都开始挑战线上课程。跟传统课程不同的是,线上课程可以呈现的方式有很多,并不是只有图文结合这一种。为了方便大家选择自己满意的课程,下面就由小编为大家带来线上课程类型的介绍。 https://www.ckjr001.com/newsdetail/818.html
15.互联网金融新媒体营销矩阵:三大阵营9类平台30个新媒体二、新浪微博平台: 近两年,有观点认为微博活跃度下降了,“周边的好多人都玩微信,都不怎么玩微博了”,这不过是假象。一方面,微博和微信本就不同,微博是社交媒体,微信是社交IM,所以,王宝强事件之后,“旅游观光线”出现在微博上,而非出现在微信之上。另一方面,持微博活跃度下降观点的人,忽略了中国互联网的分层和渗透https://www.digitaling.com/articles/30648.html
16.科研业务在“智慧校园一、本次科研院在“微服务平台”开通办理8类线上业务,分别为“纵向项目用印申请”、“社科项目用印申请”、“平台基地用印申请”、“科技奖励用印申请”、“技术合同认定和横向项目过程管理用印申请”、“专利变更转让及标准等其他事务用印申请”、“横向投标用印申请”、“专利申请及软著申请用印申请”。 https://kj.tyut.edu.cn/info/1092/7585.htm
17.2024年山东一卡通回收平台排行榜,正规平台推荐在2024年,山东一卡通的回收市场呈现出多元化的发展趋势,众多回收平台应运而生,为持卡人提供了丰富的选择。这些平台既包括传统的线下回收点,也涵盖了新兴的线上回收平台。 回收平台类型 线下回收平台,如一些线下回收市场,作为传统的回收方式,仍然在市场上占有一席之地。它们提供了直观的回收,但可能受限于地域和时间,需https://www.taotaoshou.com/archivesDetails/12884.html