django 如果在多个app使用各自的用户多认证

django 如果在多个app使用各自的用户多认证,第1张

这个不能再settings.py里面直接配置,配置了以后这个配置文件写的就是袭腊默认Auth系竖禅嫌统了,想要用到各自的用户表来余手认证话,你在每个App的models.py和admin.py里面分别继承Django自带的Auth系统,from django.contrib.auth import authenticate, login, logout这句话就可以解决views里面的登录与退出;from django.contrib.auth.models import User就可以继承User的models。

觉得好的话采纳一下哦

不是使用自带admin的时候,有个配置文件捏,主要在那个文件里面改就好了,admin的实质其实就是一个工厂而已,配置了在系统第一次加载的时候就已经全部生成,默认路径是admin,既然你自己写了admin模块,你把你写的url路径换一个,那么在访问的时候,就两个都能访问了撒,比如你的admin最开始雀册渗的基本路顷脊径叫admin1,就和默认admin分开了,想用那个服务,调用哪一姿凯个就好了

首先,让我们开始创建项目和APP,前面我也很详细的说明了大悄如何创建项目和APP。

创建数据库,和相关用户的权限。

root@CD-FTP-VPN:/opt/jastme# tree

.

|-- jastme

| |-- __init__.py

| |-- __init__.pyc

| |-- settings.py

| |-- settings.pyc

| |-- urls.py

| |-- urls.pyc

| |-- wsgi.py

| `-- wsgi.pyc

|-- login

| |-- admin.py

| |-- __init__.py

| |-- __init__.pyc

| |-- models.py

| |-- models.pyc

| |-- tests.py

| |-- views.py

| `-- views.pyc

|-- manage.py

`-- start.sh

2 directories, 18 files

root@CD-FTP-VPN:/opt/jastme#

使用python manage.py syncdb 来创建一个叫jastme,密码为jastme的超级用户。我们可以用Django-admin来管理这些用户配早。

首先看看setting.py

root@CD-FTP-VPN:/opt/jastme# more jastme/培仿雀settings.py

"""

Django settings for jastme project.

For more information on this file, see

https://docs.djangoproject.com/en/1.7/topics/settings/

For the full list of settings and their values, see

https://docs.djangoproject.com/en/1.7/ref/settings/

"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)

import os

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# Quick-start development settings - unsuitable for production

# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!

SECRET_KEY = 'r!1=i^3qhwglr(zf*9&n*ii!b_oy2h()ics(6(de3wuo0-oh8h'

# SECURITY WARNING: don't run with debug turned on in production!

DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []

# Application definition

INSTALLED_APPS = (

#'django.contrib.admin', #注释掉admin

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'login',

)

MIDDLEWARE_CLASSES = (

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.common.CommonMiddleware',

#'django.middleware.csrf.CsrfViewMiddleware',#这个中间件是防止跨站攻击的。有意思的朋友可以去搜索下。

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.auth.middleware.SessionAuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

)

ROOT_URLCONF = 'jastme.urls'

WSGI_APPLICATION = 'jastme.wsgi.application'

# Database

# https://docs.djangoproject.com/en/1.7/ref/settings/#databases

DATABASES = { #数据库的相关配置

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME':'jastme',

'USER':'jastme',

'PASSWORD':'jastme',

'HOST':'localhost',

'PORT':'3306',

}

}

# Internationalization

# https://docs.djangoproject.com/en/1.7/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

# Static files (CSS, JavaScript, Images)

# https://docs.djangoproject.com/en/1.7/howto/static-files/

STATIC_URL = '/static/'

TEMPLATE_DIRS =( #模板的路径

'/var/www/jastme/',

)

views.py

root@CD-FTP-VPN:/opt/jastme# more login/views.py

from django.shortcuts import render

from django.contrib import auth

# Create your views here.

from django.shortcuts import render_to_response

from django.contrib.auth import authenticate, login

from django.template.loader import get_template

from django.template import Context

from django.http import HttpResponse,HttpResponseRedirect

from django.contrib.auth.decorators import login_required

def my_login(request):#我们自定义一个函数,这个函数名字一定不要写成login,因为Django有有login模块。

if request.method == 'POST': #我们使用POST的方法来获取从HTML传递过来的表单内容

username = request.POST['username'] #获取账号和密码

password = request.POST['password']

user = authenticate(username=username, password=password)#我们用user来实例化 authenticate(username=username, password=password)

if user is not None: #用户名不为空

if user.is_active: #为激活用户

login(request, user) #调用django.contrib.auth中的login函数,可以具体去看看源码

return HttpResponseRedirect('/main') #登陆成功就重定向到主页

else:

login_error = 'login error.'

return render_to_response('login.html', {'login_error' : login_error, 'is_display' : 'display:block'}) #失败则返回登陆页面

return render_to_response('login.html', {'is_display' : 'display:none'})#同理

@login_required #调用了这个修饰器,就可以让这个页面在成功登陆后才能访问

def main(request):

return HttpResponse('login sucess') #直接返回这个字符串

再看看urls.py

root@CD-FTP-VPN:/opt/jastme# more jastme/urls.py

from django.conf.urls import patterns, include, url

#from django.contrib import admin

from login.views import my_login,main #这里是我们导入的项目中的views.py中的模块,就是我们自己写的函数

#from django.contrib.auth.views import login, logout

urlpatterns = patterns('',

# Examples:

# url(r'^$', 'jastme.views.home', name='home'),

# url(r'^blog/', include('blog.urls')),

#url(r'^admin/', include(admin.site.urls)),

(r'^main/$',main),

(r'^login/$',my_login),

)

login.html

root@CD-FTP-VPN:/var/www/jastme# pwd

/var/www/jastme

root@CD-FTP-VPN:/var/www/jastme# ls

login.html

<form action="" method="POST"> #在此页面以POST的方式来提交参数

<input type=text name="username">

<input type=text name="password">

<input type=submit value="send">

</form>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12225307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存