我做了一个小项目。
用户首先登录,然后将他重定向到主页。
但是,如果用户尚未登录,那么如果我们粘贴该主页的URL,那么该主页也会打开。
我已经尝试了很多网上给出的东西,但是没有用。
这是我的urls.py
from django.conf.urls import url
from django.contrib import admin
from blog import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.login, name='login'),
url(r'^register/$', views.register, name='register'),
url(r'^home/$', views.home, name='home'),
url(r'^javaq/$', views.javaq, name='javaq'),
url(r'^javar/$', views.javar, name='javar'),
url(r'^csq/$', views.csq, name='csq'),
url(r'^csr/$', views.csr, name='csr'),
url(r'^cq/$', views.cq, name='cq'),
url(r'^cr/$', views.cr, name='cr'),
url(r'^cppq/$', views.cppq, name='cppq'),
url(r'^cppr/$', views.cppr, name='cppr'),
url(r'^pythonq/$', views.pythonq, name='pythonq'),
url(r'^pythonr/$', views.pythonr, name='pythonr'),
url(r'^mini/$', views.mini, name='mini'),
]
这是我的观点。py
from django.shortcuts import render
from .models import logininfo,CSTEST,CTEST,CPPTEST,JAVATEST,PYTHONTEST,result
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.views.decorators.cache import cache_control
import datetime
def login(request):
if request.method=="POST":
user_name=request.POST.get("username")
sid=request.POST.get("sid")
password=request.POST.get("password")
article = logininfo()
article.user_name = user_name
article.sid = sid
article.password = password
article.save()
return render(request,'login.html')
def home(request):
if request.method=="POST":
sid=request.POST.get("sid")
password=request.POST.get("password")
request.session['sd'] = sid
user_obj=logininfo.objects.filter(sid=sid,password=password)
if user_obj.count()==0:
return HttpResponse("Sorry wrong password try again")
return render(request,'home.html')
def register(request):
return render(request,'register.html')
def javaq(request):
context = {
'query_results' : JAVATEST.objects.all()
}
return render(request, 'javaq.html',context)
def javar(request):
if request.method=="POST":
chosenOption = ''
correctAns = ''
c=0
x=1
for ans in JAVATEST.objects.all():
chosenOption=str(request.POST.get("java"+str(x)))
correctAns=str(ans.ANSWER)
if chosenOption==correctAns:
c=c+1
x=x+1
article = result()
article.sid = request.session['sd']
article.marks = c
article.subject = 'JAVA'
article.tdate = str(datetime.datetime.now())
article.save()
context = {
'query_results1' :c
}
return render(request, 'javar.html',context)
答案 0 :(得分:2)
将@login_required装饰器添加到您的视图函数中(该装饰器用于呈现那些不应该出现在未登录用户的页面)。
您可以在this page中对该装饰器有更广泛的了解。
答案 1 :(得分:2)
您可以在页面上使用django内置的登录身份验证
@login_required(login_url='/url where you want user to redirect/')
def myview(request):
do something
return something #returns when user is logged in
答案 2 :(得分:0)
也许您应该看看Django Stronghold。
按照说明在您的设置中启用它,默认情况下每个视图都变为私有。
然后,您可以装饰您希望公众访问的任何功能,如下所示:
@public
def register():
# Do something
这可能是适合初学者的方法,因为您正在做的事情(在主视图中处理身份验证逻辑)意味着您将在每个单独的视图中重复此操作,如果您错过了某些内容,请私有该应用程序的某些部分可能最终会公开。