07.Django中的自定义认证方式和权限的设计与使用

简介: 一:自定义认证方式 前提条件 1:建立简单的django工程 2:简单的login模块 3:基础的配置假设已经完成 4:User配置参考上一篇博客http://blog.csdn.net/gamer_gyt/article/details/50499653 以上如果哪点不明白,请查看前边章节诶的内容 login/views.

一:自定义认证方式

前提条件

1:建立简单的django工程

2:简单的login模块

3:基础的配置假设已经完成

4:User配置参考上一篇博客http://blog.csdn.net/gamer_gyt/article/details/50499653

以上如果哪点不明白,请查看前边章节诶的内容


login/views.py:

class LoginForm(forms.Form):
   username=forms.CharField(label="username:",max_length=100)
   email = forms.CharField(label = "email:" , max_length = 100)
   pwd = forms.CharField(label = "password:" , widget=forms.PasswordInput)
def login(request):
    if ('email' or 'pwd'or 'username') not in request.GET:
        lf = LoginForm()
        return render_to_response("login.html",{"lf":lf})
    lf = LoginForm(request.GET)
    name = lf.data['username']
    email = lf.data['email']
    pwd = lf.data['pwd']
    try:
        user = User.objects.get(email=email,username=name)
    except User.DoesNotExist:
        pass
    else:
   	return HttpResponse("login in:" +user.username + user.email)

login.html:

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

启动服务

127.0.0.1:8080/logre/login



点击OK:



完工


二:权限设计与应用

新建一个blog模块,定义models.py:

class Blog(models.Model):
    blog_title = models.CharField(blank=False,verbose_name="标题",max_length=20,unique=True)
    #blank = False 表示该项必选
    blog_time = models.DateTimeField(verbose_name="发表时间")
    blog_content = models.TextField(blank=False,verbose_name="内容")
    blog_seenum = models.IntegerField(verbose_name="浏览量",default=0)
    def __unicode__(self):
        return self.blog_title
    class Meta:
        db_table = "blog"
        permissions=(
            ("can_view","can see blogs"),
            ("can_add","can add blogs"),
            ("can_edit","can edit blogs"),
            ("can_delete","can delete blogs"),
        )

在admin.py中进行注册:

class BlogAdmin(admin.ModelAdmin):
    list_display = ('blog_title','blog_time','blog_seenum')
    list_filter = ('blog_title','blog_time','blog_seenum')
    search_fields = ('blog_title','blog_time','blog_seenum')
    fields = ('blog_title','blog_time','blog_content','blog_seenum')
    ordering = ('-blog_time',)
admin.site.register(Blog,BlogAdmin)

新建注册页面:regeister.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="get" enctype="multipart/form-data">
    {{ lf.as_p }}
    <input type="submit" value="OK">
</form>
</body>
</html>
在logre的views模块中添加regeister函数

def regeister(request):
    if ('email' or 'pwd'or 'username') not in request.GET:
        lf = LoginForm()
        return render_to_response("regeister.html",{"lf":lf})
    lf = LoginForm(request.GET)
    name = lf.data["username"]
    email = lf.data['email']
    pwd = lf.data['pwd']

    user = User()
    user.username= name
    user.email = email
    user.pwd = pwd
    user.save()

    user.user_permissions = [Permission.objects.get(codename="can_view"),Permission.objects.get(codename='can_add')]
    user.save()
    return HttpResponseRedirect('/logre/login')

修改login函数为:

def login(request):
    if ('email' or 'pwd'or 'username') not in request.GET:
        lf = LoginForm()
        return render_to_response("login.html",{"lf":lf})
    lf = LoginForm(request.GET)
    name = lf.data['username']
    email = lf.data['email']
    pwd = lf.data['pwd']
    try:
        user = User.objects.get(email=email,username=name)
    except User.DoesNotExist:
        pass
    else:
        if user.check_password(pwd):
            if user.has_perm('blog.can_view'):
                return HttpResponse("you can see blogs")
            return HttpResponse("you can not  see blogs")

注册登录:

you can see blogs

相关文章
|
2月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗
|
3月前
|
安全 数据库 数据安全/隐私保护
|
3月前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
3月前
|
中间件 API 网络架构
Django后端架构开发:从匿名用户API节流到REST自定义认证
Django后端架构开发:从匿名用户API节流到REST自定义认证
38 0
|
5月前
|
API 数据安全/隐私保护 网络架构
在django3中配置应用的权限
【6月更文挑战第9天】该文档介绍了Django REST Framework的权限管理。总结来说,本文介绍如何设置严格项目权限和如何通过自定义权限控制对特定资源的访问。
55 10
在django3中配置应用的权限
|
5月前
|
安全 API 数据安全/隐私保护
Django REST framework安全实践:轻松实现认证、权限与限流功能
Django REST framework安全实践:轻松实现认证、权限与限流功能
|
5月前
|
数据安全/隐私保护 Python
必知的技术知识:django自定义分页器
必知的技术知识:django自定义分页器
|
14天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
96 44
|
15天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
29 2
|
18天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
28 1