我目前正在玩REST和backbone.js并遇到了这个问题:
'LoginView' object has no attribute 'COOKIES'
Run Code Online (Sandbox Code Playgroud)
以下代码可能导致了问题.我已经在javascript中注释了一些内容,因为我希望它直接加载到服务器上,但我认为将它带到一起会很好.
我还可以补充一点,我已经检查了表单中的csrf-token,它就在那里.
views.py
class LoginView(TemplateView):
authentication_form=LoginForm
form_class = LoginForm
redirect_field_name=REDIRECT_FIELD_NAME
template_name = 'front/login.html'
initial = {'key': 'value'}
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
@method_decorator(sensitive_post_parameters())
@csrf_protect
@never_cache
@api_view(['GET', 'POST'])
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
print request.COOKIES('csrftoken')
print request.POST.get('csrfmiddlewaretoken')
if form.is_valid():
#if not is_safe_url(url=redirect_to, host=request.get_host()):
# redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)
print request.POST.get('email')
#user = self.get_user(request.POST.get('email'))
#print user
#auth = UserDataAuthentication(request, user)
user = authenticate(email=request.POST.get('email'), password=request.POST.get('password'))
if …Run Code Online (Sandbox Code Playgroud) 我已经检查了一下,无论是在这里还是谷歌,都没有找到我正在寻找的确切答案.
我目前正在开发一个Django项目,我似乎生活在其中一个时区概念不被高度重视的领域.这里的时区是CEST,替代方案:UTC + 1,但都不能在我的设置文件中设置.我一直在寻找如何改变它,另一种方法是下载并包含一个库,应该做一些调整,经过一些调整.但我想知道是否有更顺畅,更快捷的方式来做到这一点.
date = datetime.datetime.now()给了我两个小时前的时间.我既可以使用UTC也可以使用GMT,但两者都不够接近.
我在Django调试视图中收到此错误:
'WSGIRequest' object has no attribute 'get'
Run Code Online (Sandbox Code Playgroud)
这是一个登录脚本,大多数是从管理代码复制的,主要是为了练习/调整原因.我在views.py中的代码如下:
@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name="main/login.html",
authentication_form=LoginForm,
redirect_field_name=REDIRECT_FIELD_NAME,
current_app=None, extra_context=None):
"""
Displays the login form and handles the login action.
"""
redirect_to = request.REQUEST.get(redirect_field_name, '')
if request.method == "POST":
form = authentication_form(request, data=request.POST)
if form.is_valid():
# Ensure the user-originating redirection url is safe.
if not is_safe_url(url=redirect_to, host=request.get_host()):
redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)
# Okay, security check complete. Log the user in.
user = get_user(request.POST.get('email'))
auth_login(request, user)
return HttpResponseRedirect(redirect_to)
else:
form = authentication_form(request)
current_site = …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于这个问题的文章,无论是在这里还是其他地方,都没有找到可以帮助我的答案.由于主题似乎相当广泛,我认为最好的方法是提问.
我目前通过jquery文件中的$ .post脚本将表单中的登录数据发送到php脚本.没有问题.我有一个类,它通过一系列函数来验证和保护字符串,所以没有任何问题.我一直设置会话,我可以通过向$ .post添加函数(数据)打印出来.
我已将session_start()添加到php-script和index.php.我正在使用Chromium并且可以看到已经设置了一个会话,但是当我创建一个print_r($ _ SESSION)时; 它出来了.显然,这也导致我的if(isset($ _ SESSION ['uid']))也不起作用.
JS:
$('#login').submit(function(e){
e.preventDefault();
values = {};
var url = '../admin/php/signIn.php';
console.log('Clicked on submit.');
$.each($(this).serializeArray(), function(i, field){
values[field.name] = field.value;
});
$.post(url, {username: values.username, password: values.password})
.done(function(data){ location.reload(); /*alert(data);*/ })
.fail(function(){ alert('Fail.'); });
});
Run Code Online (Sandbox Code Playgroud)
PHP:
private function login($uid, $uname){
$_SESSION['uid'] = $uid;
echo $_SESSION['username'] = $uname;
session_start();
}
Run Code Online (Sandbox Code Playgroud)
我在其中一个会话中添加了一个echo,只是为了能够通过jquery看到它.问题是"私人功能[...]"还是其他地方?(正如我之前所说的,参加课程.)
我希望这对某人有意义,因为我在这里迷失了.