文本编译器

 # 添加文章
url(r'^addarticle/$', views.addarticle),
# 利用文本编辑器添加文章
def addarticle(request):
'''
添加文章
:param request:
:return:
'''
if request.method == 'POST':
article_form=ArticleForm(request.POST)
if article_form.is_valid():
title = article_form.cleaned_data.get("title")
content = article_form.cleaned_data.get("content")
img = article_form.cleaned_data.get("content")
article_obj = models.Article.objects.create(title=title, desc=content,create_time=datetime.datetime.now(),img=img,user_id=1)
if article_obj:
return HttpResponse('okokokokokok')
else:
pass
article_form=ArticleForm()
return render(request, 'addarticle.html',{'article_form':article_form})
# 添加文章图片预览
def uploadfile(request):
file_obj = request.FILES.get('imgFile')
file_name = file_obj.name
from LoginEdit import settings
import os
path=os.path.join(settings.BASE_DIR,'app01','media',file_name)
with open(path,'wb') as f:
for i in file_obj:
f.write(i)
# 根据定值的大小上传
# for i in file_obj.chunks():
# f.write(i)
response={
# 标识成功与否的状态,上传
'error':0,
# 预览,src的路径就是下面的url
'url':'/media/'+file_name+'/'
}
import json
return HttpResponse(json.dumps(response))
html
<script>
KindEditor.ready(function (K) {
window.editor = K.create('#id_content', {
width: '600px',
height: '500px',
items: [
'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste',
'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',
'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',
'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage',
'flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak',
'anchor', 'link', 'unlink', '|', 'about'
],
{# 不能拖动0左右都不能拖拉,1左右不能,2都能#}
resizeType: 2,
{# 上传文件,文件的url地址#}
uploadJson: '/uploadfile/',
{# 因为传的是数据需要加入cstftoken#}
extraFileUploadParams: {
csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()
}
});
});
</script>

详情见:

http://kindeditor.net/doc.php

滑动验证

url(r'^login/', views.pcajax_validate),

# 滑动
url(r'^pcgeetest/register',views.pcgetcaptcha,name='pcgetcaptcha'), url(r'^pcgeetest/ajax_validate',views.pcajax_validate,name='pcajaxvalidate'),
# huadong
from app01.geetest import GeetestLib
import json pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4"
mobile_geetest_id = "7c25da6fe21944cfe507d2f9876775a9"
mobile_geetest_key = "f5883f4ee3bd4fa8caec67941de1b903" def pcgetcaptcha(request):
user_id = 'test'
gt = GeetestLib(pc_geetest_id, pc_geetest_key)
status = gt.pre_process(user_id)
request.session[gt.GT_STATUS_SESSION_KEY] = status
request.session["user_id"] = user_id
response_str = gt.get_response_str()
return HttpResponse(response_str) def pcajax_validate(request): # 登陆也是这里,但是名字无法改
if request.method == "POST":
loginResponse = {'is_login':False,'error_msg':None}
# 验证码
gt = GeetestLib(pc_geetest_id, pc_geetest_key)
challenge = request.POST.get(gt.FN_CHALLENGE, '')
validate = request.POST.get(gt.FN_VALIDATE, '')
seccode = request.POST.get(gt.FN_SECCODE, '')
status = request.session[gt.GT_STATUS_SESSION_KEY]
user_id = request.session["user_id"]
if status:
result = gt.success_validate(challenge, validate, seccode, user_id)
else:
result = gt.failback_validate(challenge, validate, seccode)
if result:
user = request.POST.get('username')
pwd = request.POST.get('password')
valid_code = request.POST.get('valid_code') valid_code_str = request.session.get('valid_code_str') if valid_code_str.upper() == valid_code.upper(): # 不区分大小写
# from django.contrib import auth
print(user, pwd)
# userobj = auth.authenticate(username=user,password=pwd)
userobj = models.UserInfo.objects.filter(username=user, password=pwd).first() # 通过auth模块验证 对象 if userobj:
# auth.login(request,userobj) # 设置SESSIO,保存的是一条记录对象
request.session['user'] = userobj.username
loginResponse['user'] = userobj.username print('======_____++++++++', userobj.username)
else:
loginResponse['error_msg'] = 'username or password error'
else:
loginResponse['error_msg'] = 'valid code error' else:
loginResponse['error_msg'] = 'yanzhengma error' return HttpResponse(json.dumps(loginResponse))
return render(request, "login.html")
<!-- 引入封装了failback的接口--initGeetest -->
<script src="http://static.geetest.com/static/tools/gt.js"></script>
 {# 方式一,刷新验证码,通过/get_valid_img/后面加入?刷新,不需要试图函数更改#}
$("#valid_img").click(function () {
$(this)[0].src += "?"
});
# 滑动
var handlerPopup = function (captchaObj) {
// 成功的回调
captchaObj.onSuccess(function () {
var validate = captchaObj.getValidate();
$.ajax({
url: "/pc-geetest/ajax_validate", // 进行二次验证
type: "post",
dataType: "json",
data: {
username: $('#user').val(),
password: $('#pwd').val(),
csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),
valid_code: $('#valid_code').val(),
geetest_challenge: validate.geetest_challenge,
geetest_validate: validate.geetest_validate,
geetest_seccode: validate.geetest_seccode
},
success: function (data) {
console.log('sss');
if (data.user) {
console.log('dddddd'); if ($.cookie('next_path')) {
location.href = $.cookie('next_path')
}
else {
location.href = '/'
}
}
else {
$(".error").html(data.error_msg).css("color", "red");
{# setTimeout(function () {#}
{# $(".error").text("")#}
{# },1000)#}
}
}
});
});
$("#loginbtn").click(function () {
captchaObj.show();
console.log('')
});
// 将验证码加到id为captcha的元素里
captchaObj.appendTo("#popup-captcha");
// 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
};
// 验证开始需要向网站主后台获取id,challenge,success(是否启用failback)
$.ajax({
url: "/pc-geetest/register?t=" + (new Date()).getTime(), // 加随机数防止缓存
type: "get",
dataType: "json",
success: function (data) {
// 使用initGeetest接口
// 参数1:配置参数
// 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
initGeetest({
gt: data.gt,
challenge: data.challenge,
product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
// 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
}, handlerPopup);
}
}); </script>

Django前端的文本编辑器,滑动登陆的更多相关文章

  1. Django配置富文本编辑器kindeditor

    一.简介 django是一个容易快速上手的web框架,用它来创建内容驱动型的网站(比如独立博客)十分方便.遗憾的是,django并没有提供官方的富文本编辑器,而后者恰好是内容型网站后台管理中不可或缺的 ...

  2. Django 之 富文本编辑器-tinymce

    这里的富文本编辑器以 tinymce 为例. 环境:ubuntu 16.04 + django 1.10 + python 2.7 ubuntu安装tinymce: python 2.7 $ sudo ...

  3. 给Django后台富文本编辑器添加上传文件的功能

    使用富文本编辑器上传的文件是要放到服务器上的,所以这是一个request.既然是一个request,就需要urls.py进行转发请求views.py进行处理.views.py处理完了返回一个文件所在的 ...

  4. Django使用富文本编辑器

    1.下载kindeditor 网址:http://kindeditor.net/demo.php2.解压到项目中 地址:\static\js\kindeditor-4.1.103.删除没用的文件 例如 ...

  5. Django之富文本编辑器kindeditor 及上传

    1.什么是富文本编辑器 百度百科(https://baike.baidu.com/item/%E5%AF%8C%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8 ...

  6. Django之富文本编辑器

    1.在虚拟环境中安装包. pip install django-tinymce==2.6.0 2.在配置文件中INSTALLED_APPS注册 3.配置富文本编辑器的宽高 4.配置编辑器url.

  7. 前端富文本编辑器 vue-html5-editor

    1..项目创建与初始化 在安装好脚手架的依赖后,要执行 npm install vue-html5-editor -S 来安装这个富文本插件,由于这个富文本插件的图标是依赖font-awesome.c ...

  8. 前端富文本编辑器vue + tinymce

    之前有项目需要用到富文本编辑器,在网上找了好几个后,最终选择了这个功能强大,扩展性强的tinymce tinymce中文文档地址(不全):http://tinymce.ax-z.cn/ tinymce ...

  9. [原创]Python/Django使用富文本编辑器XHeditor上传本地图片

    前言 为了在Django框架下使用Xheditor上传图片,居然折腾了我一个晚上.期间也遇到种种问题,网上相关资料极少.现在把经验分享给大家. 正文 xheditor篇 1.下载http://xhed ...

随机推荐

  1. sed用法详解

    转载自: SED单行脚本快速参考(Unix 流编辑器) 如侵犯您的版权,请联系:Windeal12@qq.com ------------------------------------------- ...

  2. 實現多个checkbox單選功能(转)

    <script type="text/javascript">        function check(obj) {            var checkbox ...

  3. java事务(二)

    本地事务 事务类型 事务可以分为本地事务和分布式事务两种类型.这两种事务类型是根据访问并更新的数据资源的多少来进行区分的.本地事务是在单个数据源上进行数据的访问和更新,而分布式事务是跨越多个数据源来进 ...

  4. POJ 1951

    把给定字符串翻译成目标字符串需要满足的条件是: 1.开头不能有空格 2.末尾不能有空格 3.给定标点前不能有空格 4.不能有A.E.I.O.U 5.空格不能和空格相邻 6.相同的字母只能出现1次 给出 ...

  5. jquery-ui 拖拽排序

    : 引入   <script src="//code.jquery.com/jquery-1.9.1.js"></script> <script sr ...

  6. ubuntu 搜狗输入法成功安装

    第一次成功安装这个破玩意,心里万分高兴啊! 几个条件: 1 ubuntu14.04 2 对的教程 参考文献:http://jingyan.baidu.com/article/ad310e80ae6d9 ...

  7. HDU2037 今年暑假不AC

    解题思路:贪心问题,关键突破口是,先将节目的结束时间 从小到大排个序,然后依次判断后面一个节目的开始时间 是否大于或等于前一个符合条件的节目的结束时间.见代码: #include<cstdio& ...

  8. PCA最小平方误差理论推导

    PCA最小平方误差理论推导 PCA求解其实是寻找最佳投影方向,即多个方向的标准正交基构成一个超平面. 理论思想:在高维空间中,我们实际上是要找到一个d维超平面,使得数据点到这个超平面的距离平方和最小 ...

  9. IIS并发瓶颈线程数的限制

    .NET线程池最大线程数的限制-记一次IIS并发瓶颈 https://www.cnblogs.com/7rhythm/p/9964543.html .NET ThreadPool 最大线程数的限制 I ...

  10. DML操纵语句

    --在新增数据的时候,如果在表名之后没有跟 列名,那么values()必须写全--顺序必须不能改变,这个顺序就是表中列的顺序insert into dept values(70,'20','哈哈') ...