伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Django项目知识点(二)

来源:本站原创 浏览:113次 时间:2022-10-06
5. 自定义过滤器和模板标签5.1 新建templatetags模块
  • app 目录下,新建templatetags 模块(不是文件夹)

  • 再到 templatetags下创建py文件(名字就是过滤器的名称)

注意:templatetags这个目录名字是固定的,而里面的模块名是自定义的.

5.2 注册过滤器
  1. 通过django.template.Library 它的实例的 filter 方法

filter 有两个参数:

  • name 过滤器的名称,是个字符串,默认使用方法名作为过滤器的名称

  • filter_func 定义的过滤器的函数

例子

现在需要把性别1变为男。0对应女

在这里插入图片描述
这就应该写自定义过滤器


在这里插入图片描述
通过{% load %} 加载自定义过滤器


在这里插入图片描述
在加载过滤器的html中引入函数的名称
在这里插入图片描述
效果如下
在这里插入图片描述

还可以通过: 来传入参数

在这里插入图片描述

效果如下:

在这里插入图片描述5.3 自定义模板标签
  • 自定义简单标签

通过@register.simple_tag()注册,可以设置name属性,不设置就是函数名

这里的context通过view传递的,需要在simple_tag 中,设置参数take_context=True,可以在自定义的模板标签中拿到context中的format_str

在这里插入图片描述

将日期的format_str传入

在这里插入图片描述

这让就可以将datetime的改成自己想要的类型

在这里插入图片描述
  • 自定义包含标签(在特定html传入参数)

通过@register.inclusion_tag()定义

在这里插入图片描述在这里插入图片描述

student从view中导入到index.html

加粗样式

stu.course是模型那边的

在这里插入图片描述

效果如下

在这里插入图片描述6. 用户注册

官方文档

django的强大之处在于开发效率高,内置了权限模块之类的很多常用功能。django内置权限系统有大的自定义功能扩展,不需要重复造轮子。

  • 在settings.py中设置AUTH_USER_MODEL指向user的app的User模型

# 自定义用户模型
# 这里的user是app,User是模型 不是固定的
AUTH_USER_MODEL = 'user.User'
6.1 UserManager
  • UserManager这是django用户管理者

通过python manage createsupermanage来创建超级用户,但是有的时候还需要超级用户的其他字段,如email

user app下的model

from  django.contrib.auth.models import AbstractUser,UserManager as _UserManager
# Create your models here.
class UserManager(_UserManager):
    '''
    自定义usermanage 修改时使用python manage createsupermanage命令时,我可以不提供email字段
    '''
    def create_superuser(self,username,password,email= None,**extra_fields):
        return  super().create_superuser(username=username,password=password,email=email,**extra_fields)

这里将内置的UserManager命名为_UserManager,来改写UserManager

这是UserManager的源码

通过上面改写UserManager的create_superuser创建超级用户可以不提供email字段

6.2 AbstractUser
  • AbstractUser这是django特定的抽象用户

导入方式 : from django.contrib.auth.models import AbstractUser

创建用户的model,继承了AbstractUser

class User(AbstractUser):
    """
    add mobile, email_active fields to Django user model.
    """
    mobile = models.CharField('手机号', max_length=11, unique=True, help_text='手机号', error_messages={'unique': '此手机号码已注册'})
    email_active = models.BooleanField('邮箱状态', default=False)
    class Meta:
        db_table = 'tb_user'    # 指定数据库表名
        verbose_name = '用户'     # 在admin站点中显示名称
        verbose_name_plural = verbose_name  # 显示复数
    def __str__(self):
        return self.username
    # A list of the field names that will be prompted for
    # when create a user via createsuperuser management command.
    # 必需字段
    REQUIRED_FIELDS = ['mobile']
    # specify manager
    objects = UserManager()

标准的用户注册流程

  • 注册页面

  • 图片验证码

  • 用户名检测是否注册

  • 手机号检测是否注册

  • 短信验证码

  • 注册保存用户数据

因为图片验证码,短信验证码考虑到后续可能会在其他业务中用到,因此将验证码功能独立出来,创建一个新appverification。在项目中一般叫verification 验证的意思

用户校验典型的POST,需创建forms.py

from django_redis import get_redis_connection
class RegisterForm(forms.Form):
    """
    用户注册表单
    """
    username = forms.CharField(label='用户名', max_length=20, min_length=5, error_messages={
        'max_length': '用户名长度要小于20',
        'min_length': '用户名长度要大于5',
        'required': '用户名不能为空',
    })
    password = forms.CharField(label='密码', max_length=20, min_length=6, error_messages={
        'max_length': '密码长度要小于20',
        'min_length': '密码长度要大于5',
        'required': '密码不能为空',
    })
    password_repeat = forms.CharField(label='确认密码', max_length=20, min_length=6, error_messages={
        'max_length': '密码长度要小于20',
        'min_length': '密码长度要大于5',
        'required': '密码不能为空',
    })
    mobile = forms.CharField(label='手机号码', max_length=11, min_length=11, validators=[mobile_validator, ], error_messages={
        'max_length': '手机号码长度不正确',
        'min_length': '手机号码长度不正确',
        'required': '手机号码不能为空',
    })
    sms_code = forms.CharField(label='短信验证码', max_length=constants.SMS_CODE_LENGTH, min_length=constants.SMS_CODE_LENGTH, error_messages={
        'max_length': '短信验证码长度不正确',
        'min_length': '短信验证码长度不正确',
        'required': '短信验证码不能为空',
    })

    def clean_username(self):
        """
        校验用户名
        :return:
        """
        username = self.cleaned_data.get('username')

        if User.objects.filter(username=username).exists():
            raise forms.ValidationError('用户名已存在!')

        return username

    def clean_mobile(self):
        """
        校验手机号码
        :return:
        """
        mobile = self.cleaned_data.get('mobile')

        if User.objects.filter(mobile=mobile).exists():
            raise forms.ValidationError('手机号码已注册!')

        return mobile

    def clean(self):
        """
        联合校验
        :return:
        """
        clean_data = super().clean()
        # 校验密码是否一致
        password = clean_data.get('password')
        password_repeat = clean_data.get('password_repeat')

        if password != password_repeat:
            raise forms.ValidationError('两次密码不一致!')

        # 校验短信验证码
        sms_code = clean_data.get('sms_code')
        moblie = clean_data.get('mobile')

        redis_conn = get_redis_connection(alias='verify_code')
        real_code = redis_conn.get('sms_text_{}'.format(moblie))
        if (not real_code) or (real_code.decode('utf-8') != sms_code):
            raise forms.ValidationError('短信验证码错误!')

上面的代码只做参考

有点长,先在此处断开



一直原创,从未转载

请认准我,将我置标


转发,好看支持一下,感谢



  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net