添加了登陆,修改密码,注册三个页面的csrf;

添加了usernameCheck的valuedation检测方法;
urls.py 添加了register,change_password页面。
This commit is contained in:
sxw
2015-08-04 16:05:40 +08:00
parent 68c5a580d7
commit 62a9e050f5
8 changed files with 75 additions and 5 deletions

View File

@@ -10,6 +10,8 @@ urlpatterns = [
url(r'^docs/', include('rest_framework_swagger.urls')), url(r'^docs/', include('rest_framework_swagger.urls')),
url(r'^admin/$', TemplateView.as_view(template_name="admin/index.html"), name="admin_index_page"), url(r'^admin/$', TemplateView.as_view(template_name="admin/index.html"), name="admin_index_page"),
url(r'^login/$', TemplateView.as_view(template_name="oj/account/login.html"), name="user_login_page"), url(r'^login/$', TemplateView.as_view(template_name="oj/account/login.html"), name="user_login_page"),
url(r'^register/$', TemplateView.as_view(template_name="oj/account/register.html"), name="user_register_page"),
url(r'^change_password/$', TemplateView.as_view(template_name="oj/account/change_password.html"), name="user_change_password_page"),
url(r'^api/login/$', UserLoginAPIView.as_view(), name="user_login_api"), url(r'^api/login/$', UserLoginAPIView.as_view(), name="user_login_api"),
url(r'^api/register/$', UserRegisterAPIView.as_view(), name="user_register_api"), url(r'^api/register/$', UserRegisterAPIView.as_view(), name="user_register_api"),
url(r'^api/change_password/$', UserChangePasswordAPIView.as_view(), name="user_change_password_api"), url(r'^api/change_password/$', UserChangePasswordAPIView.as_view(), name="user_change_password_api"),

View File

@@ -1,5 +1,5 @@
require(["jquery", "bs_alert", "validation"], function($, bs_alert){ require(["jquery", "bs_alert", "csrf", "validation"], function($, bs_alert, csrfHeader){
$("#change_password-form").formValidation({ $("#change_password-form").formValidation({
@@ -69,6 +69,7 @@ require(["jquery", "bs_alert", "validation"], function($, bs_alert){
var new_password = $("#new_password ").val(); var new_password = $("#new_password ").val();
var password = $("#password").val(); var password = $("#password").val();
$.ajax({ $.ajax({
beforeSend: csrfHeader,
url: "/api/change_password/", url: "/api/change_password/",
data: {username: username, new_password: new_password , old_password : password}, data: {username: username, new_password: new_password , old_password : password},
dataType: "json", dataType: "json",

View File

@@ -1,4 +1,4 @@
require(["jquery", "bs_alert", "validation"], function($, bs_alert){ require(["jquery", "bs_alert", "csrf", "validation"], function($, bs_alert, csrfHeader){
$("#login-form") $("#login-form")
.formValidation({ .formValidation({
framework: "bootstrap", framework: "bootstrap",
@@ -24,6 +24,7 @@ require(["jquery", "bs_alert", "validation"], function($, bs_alert){
var username = $("#username").val(); var username = $("#username").val();
var password = $("#password").val(); var password = $("#password").val();
$.ajax({ $.ajax({
beforeSend: csrfHeader,
url: "/api/login/", url: "/api/login/",
data: {username: username, password: password}, data: {username: username, password: password},
dataType: "json", dataType: "json",

View File

@@ -1,4 +1,4 @@
require(["jquery", "bs_alert", "validation"], function($, bs_alert){ require(["jquery", "bs_alert", "csrf", "validation"], function($, bs_alert, csrfHeader){
$("#register-form") $("#register-form")
.formValidation({ .formValidation({
@@ -13,6 +13,9 @@ require(["jquery", "bs_alert", "validation"], function($, bs_alert){
min: 3, min: 3,
max: 30, max: 30,
message: '用户名长度必须在3到30位之间' message: '用户名长度必须在3到30位之间'
},
usernameCheck:{
message: '用户名已存在'
} }
} }
}, },
@@ -75,6 +78,7 @@ require(["jquery", "bs_alert", "validation"], function($, bs_alert){
var real_name = $("#real_name").val(); var real_name = $("#real_name").val();
var password = $("#password").val(); var password = $("#password").val();
$.ajax({ $.ajax({
beforeSend: csrfHeader,
url: "/api/register/", url: "/api/register/",
data: {username: username, real_name: real_name, password: password}, data: {username: username, real_name: real_name, password: password},
dataType: "json", dataType: "json",

View File

@@ -14,6 +14,7 @@ var require = {
bs_alert: "utils/bs_alert", bs_alert: "utils/bs_alert",
submit_code: "app/oj/problem/submit_code", submit_code: "app/oj/problem/submit_code",
contest: "app/admin/contest/contest", contest: "app/admin/contest/contest",
csrf: "utils/csrf",
//formValidation 不要在代码中单独使用而是使用和修改utils/validation //formValidation 不要在代码中单独使用而是使用和修改utils/validation
base: "lib/formValidation/base", base: "lib/formValidation/base",
@@ -26,7 +27,7 @@ var require = {
"validator/integer": "lib/formValidation/validator/integer", "validator/integer": "lib/formValidation/validator/integer",
"validator/between": "lib/formValidation/validator/between", "validator/between": "lib/formValidation/validator/between",
'validator/confirm':"lib/formValidation/validator/confirm", 'validator/confirm':"lib/formValidation/validator/confirm",
"validator/usernameCheck":"lib/formValidation/validator/usernameCheck",
//富文本编辑器 不要直接使用而是使用上面的editor //富文本编辑器 不要直接使用而是使用上面的editor
simditor: "lib/simditor/simditor", simditor: "lib/simditor/simditor",
"simple-module": "lib/simditor/module", "simple-module": "lib/simditor/module",

View File

@@ -0,0 +1,44 @@
/**
* usernameCheck validator
*/
(function(root, factory) {
"use strict";
// AMD module is defined
if (typeof define === "function" && define.amd) {
define("validator/usernameCheck", ["jquery", "base", "csrf"], factory);
} else {
// planted over the root!
factory(root.jQuery, root.FormValidation);
}
}(this, function ($, FormValidation, csrfHeader) {
FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
'en_US': {
usernameCheck: {
'default': 'Please input the same value'
}
}
});
FormValidation.Validator.usernameCheck = {
validate: function(validator, $field, options) {
if ($field.val() == '')
return true;
return !$.ajax({
async: false,
beforeSend: csrfHeader,
url: "/api/username_check/",
data: {username: $field.val()},
dataType: "json",
method: "post",
}).responseJSON.data;
}
};
}));

View File

@@ -0,0 +1,16 @@
define("csrf",function(){
function get_cookie(cookie_name) {
var name = cookie_name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1);
if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
}
return "";
}
function csrfHeader(xhr){
xhr.setRequestHeader("X-CSRFToken", get_cookie("csrftoken"));
}
return csrfHeader;
});

View File

@@ -8,7 +8,8 @@ define("validation",
'validator/date', 'validator/date',
'validator/integer', 'validator/integer',
'validator/between', 'validator/between',
'validator/confirm'], 'validator/confirm',
'validator/usernameCheck'],
function () { function () {
}); });