• Python-Django-Ajax进阶2


    -forms组件的渲染错误信息

    在模板中:<span>{{ foo.errors.0 }}</span>

    -forms使用bootstrap样式

     widget=widgets.EmailInput(attrs={'class':'form-control'}))

    -全局和局部钩子函数

    AOP:面向切面编程

    -局部钩子函数(再校验name)

    		def clean_name(self):
    			# 从cleaned_data中取出字段的值
    			name = self.cleaned_data.get('name')
    			# # 校验是否以sb开头
    			if name.startswith('sb'):
    				raise ValidationError('不能以sb开头')
    			else:
    				return name
    

      

    -全局钩子函数

    		def clean(self):
    			pwd=self.cleaned_data.get('pwd')
    			re_pwd=self.cleaned_data.get('re_pwd')
    			if pwd==re_pwd:
    				# 正确,返回self.cleaned_data
    				return self.cleaned_data
    			else:
    				# 校验失败,抛异常
    				raise ValidationError('两次密码不一致')
    

      

    cookie,session,token

    cookie
    -cookie是存在浏览器上的键值对{'name':'lqz','password':123}
    -服务器写到浏览器上的
    session:
    -因为cookie不安全,所有出了session
    -存在于服务器上的键值对 'sfdasdfa':{'name':'lqz','password':123}
    token:(待研究)

    cookie的使用:

    设置cookie:
    -HttpResponse的对象 obj.set_cookie(key,value,超时时间)
    -obj.set_signed_cookie('name','egon',salt='123')
    取cookie:
    -request.COOKIES.get(key)
    -name=request.get_signed_cookie('name',salt='123')
    删除:
    HttpResponse的对象 obj.delete_cookie('is_login')

    session的使用:

    设置
    -request.session['name']=‘lqz’
    -request.session['age']=‘18’

    取cookie:
    -request.session.get('name')
    删除:
    -request.session.delete() 只删数据库
    -request.session.flush() 浏览器cookie和数据库

    了解:其他参数(超时时间)

    auth组件

    Auth模块是Django自带的用户认证模块:

    我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

    Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

    扩展默认的auth_user表

    from django.contrib.auth.models import AbstractUser
    class UserInfo(AbstractUser):
        """
        用户信息表
        """
        nid = models.AutoField(primary_key=True)
        phone = models.CharField(max_length=11, null=True, unique=True)
        
        def __str__(self):
            return self.username

    注意:

    按上面的方式扩展了内置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:

    # 引用Django自带的User表,继承使用时需要设置
    AUTH_USER_MODEL = "app名.UserInfo"

    再次注意:

    一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。

    ContentTypefrom django.db import models

    
    from django.contrib.contenttypes.models import ContentType
    from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
    
    
    class Course(models.Model):
        title = models.CharField(max_length=32)
        # 不会在数据库中生成字段,只用于数据库操作
    policy = GenericRelation('PricePolicy',object_id_field='object_id',content_type_field='contentType') class DegreeCourse(models.Model): title = models.CharField(max_length=32) class PricePolicy(models.Model):
    # 跟ContentType表做外键关联 contentType = models.ForeignKey(to=ContentType) # 正数 object_id = models.PositiveIntegerField() # 引入一个字段,不会在数据库中创建,只用来做数据库操作 content_obj = GenericForeignKey('contentType', 'object_id')
    period = models.CharField(max_length=32) price = models.FloatField()

      

    TTL:

     

     

  • 相关阅读:
    点分治 (等级排) codeforces 321C
    树上点分治 poj 1741
    判断点在直线的左侧还是右侧
    树的重心
    链式前向星
    树上点的分治
    构造 素数
    二进制 + 模拟
    枚举 + 三分 (游标)
    枚举 + 三分
  • 原文地址:https://www.cnblogs.com/du-jun/p/10297743.html
Copyright © 2020-2023  润新知