Django 笔记 user 注册 登录 及 权限

这篇博客详细介绍了Django中用户注册、登录的过程,以及如何管理用户权限。用户在登录成功后,可以查看自己在数据库中的权限。此外,还讨论了后台admin用户的权限设置,包括活动标志、成员标志和超级用户标志的含义及作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录结构

#urls.py

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/$','blog.views.login'),  #登录
    url(r'^register/$','blog.views.register'), #注册
]
#models.py

from django.db import models
from django.contrib.auth.models import User

#用户字段扩展 
class UserProfile(models.Model):
    user = models.OneToOneField(User)  #实体关系 一对一
    #user_id = models.IntegerField(blank=False,null=False)
    desc = models.TextField(blank=True,null=True)
    QQ = models.IntegerField(blank=True,null=True)


class news(models.Model):
    list_fields = ['id','new_thread','new_title','new_url','new_time','new_from','from_url','new_boby']
    new_thread =models.TextField(blank=True,null=True)
    new_title =models.TextField(blank=True,null=True)
    new_url =models.TextField(blank=True,null=True)
    new_tim =models.TextField(blank=True,null=True)
    new_from =models.TextField(blank=True,null=True)
    from_url =models.TextField(blank=True,null=True)
    new_boby =models.TextField(blank=True,null=True)
    dele =models.BooleanField(default=0)

    def __str__(self):
        return models.Model.__str__(self)
#自定义权限  其实下面写的 数据库中默创建了 只是codename不同
    class Meta:  
        permissions = (('can_view','Can see new'), 
                       ('can_add','Can add new'),
                       ('can_edit','Can edit new'),
                       ('can_delete','can delete new'))
#admin.py

from django.contrib import admin
from blog.models import news,UserProfile
from django.contrib.auth.models import User

#定义 扩展的展示区
class ProfileInline(admin.StackedInline):  
    model = UserProfile
    verbose_name = 'profile'

class UserAdmin(admin.ModelAdmin):
    inlines = (ProfileInline,)


admin.site.register(news)
admin.site.unregister(User)    #注销User
admin.site.register(User,UserAdmin)  #采用自定义的
#views.py

from django.shortcuts import HttpResponse,render_to_response,HttpResponseRedirect
from django.views.generic import ListView,DeleteView
from django import forms
from django.contrib.auth.models import User,Permission
from blog.models import news,UserProfile
import uuid
# Create your views here.

def index(request):
    users = User.objects.all()
    for user in users:
        print user.userprofile.desc
    return HttpResponse(users)


#用户输入框
class LoginForm(forms.Form): 
    email = forms.CharField(label='E-mail:',max_length=100)
    pwd = forms.CharField(label='Password',widget=forms.PasswordInput)#指定为输入密码×××

def register(request):  #注册
    if ('email' or 'pwd') not in request.GET:
        lf = LoginForm()
        return render_to_response('register.html',{'lf':lf})
    lf =LoginForm(request.GET)
    email = lf.data['email']
    pwd = lf.data['pwd']
    user = User()
    userprofile = UserProfile()
    user.username = uuid.uuid1()  #随机生成用户名
    user.email = email
    user.set_password(pwd)
    user.save()

    userprofile.user_id = user.id  #用户扩展
    userprofile.desc = 'NULL!'  
    userprofile.QQ = '000000'
    user.user_permissions = [Permission.objects.get(codename='can_view'),Permission.objects.get(codename='can_add')]   #给予 浏览、添加 权限
    userprofile.save()  
    user.save()
    return HttpResponseRedirect('/login/') #注册完返回登录界面


def login(request):  #登录
    if ('email' or 'pwd') not in request.GET:
        lf = LoginForm()
        return render_to_response('login.html',{'lf':lf})
    lf = LoginForm(request.GET)
    email = lf.data['email']
    pwd = lf.data['pwd']
    try:
        user = User.objects.get(email=email)
    except User.DoesNotExist:
        pass
    else:
        if user.check_password(pwd): #密码是否正确
            if user.has_perm('blog.can_view'): #判断是否有‘can_view’权限
                #do something 若有此权限 可以定义相应的操作
                return HttpResponse("login:" + user.email +'You can see new!')
            return HttpResponse("login:" + user.email + ' You can\'t see new!' )
    return HttpResponseRedirect('/login/')
#login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
<form method="get" enctype="multipart/form-data">
    {{ lf.as_p }}          #LoginForm()的as_p 方法 拆解成两行
    <a href="http://127.0.0.1:8000/register">注册</a> <input type="submit" value="登录">
</form>
</body>
</html>
#register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<form method="get" enctype="multipart/form-data">
    {{ lf.as_p }}
    <input type="submit" value="提交">
</form>
</body>
</html>

来测试一下
注册
注册
登录
登录
登陆成功
这里写图片描述
登录后台查看用户 拥有的权限 user扩展
这里写图片描述
这里写图片描述
查看数据库
这里写图片描述
这里写图片描述
后台admin用户、用户组权限

  1. 活动标志,它用来控制用户是否已经激活。 如果一个用户帐号的这个标记是关闭状态,而用户又尝试用它 登录时,即使密码正确,他也无法登录系统。
  2. 成员标志,它用来控制这个用户是否可以登录管理界面(即:这个用户是不是你们组织里的成员) 由于用
    户系统可以被用于控制公众页面(即:非管理页面)的访问权限(详见第十四章),这个标志可用来区分 公众用户和管理用户。
  3. 超级用户标志,它赋予用户在管理界面中添加、修改和删除任何项目的权限。 如果一个用户帐号有这个标
    志,那么所有权限设置(即使没有)都会被忽略。

    这里写图片描述
    这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值