Python-Django-Ajax进阶2

-forms组件的渲染错误信息

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

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

-forms使用bootstrap样式

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

Python-Django-Ajax进阶2

-全局和局部钩子函数

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')

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

session的使用:

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

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

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

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

auth组件

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

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

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

Python-Django-Ajax进阶2

扩展默认的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:

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

Python-Django-Ajax进阶2

上一篇:刚刚完成了在vs2013中通过 ef连接mysql数据库的工作。感觉没有想象中的简单。试了n次终于成功。故记录成功的方法,希望可以帮到大家


下一篇:【myEcplise2015 更换主题+字体颜色】