在模板中:<span>{{ foo.errors.0 }}</span>python
widget=widgets.EmailInput(attrs={'class':'form-control'}))數據庫
AOP:面向切面編程django
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
-cookie是存在瀏覽器上的鍵值對{'name':'lqz','password':123}
-服務器寫到瀏覽器上的
session:
-由於cookie不安全,全部出了session
-存在於服務器上的鍵值對 'sfdasdfa':{'name':'lqz','password':123}
token:(待研究)編程
設置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')bootstrap
設置
-request.session['name']=‘lqz’
-request.session['age']=‘18’
取cookie:
-request.session.get('name')
刪除:
-request.session.delete() 只刪數據庫
-request.session.flush() 瀏覽器cookie和數據庫
瞭解:其餘參數(超時時間)瀏覽器
Auth模塊是Django自帶的用戶認證模塊:安全
咱們在開發一個網站的時候,無可避免的須要設計實現網站的用戶系統。此時咱們須要實現包括用戶註冊、用戶登陸、用戶認證、註銷、修改密碼等功能,這還真是個麻煩的事情呢。服務器
Django做爲一個完美主義者的終極框架,固然也會想到用戶的這些痛點。它內置了強大的用戶認證系統--auth,它默認使用 auth_user 表來存儲用戶數據。cookie
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
注意:session
按上面的方式擴展了內置的auth_user表以後,必定要在settings.py中告訴Django,我如今使用我新定義的UserInfo表來作用戶認證。寫法以下:
# 引用Django自帶的User表,繼承使用時須要設置 AUTH_USER_MODEL = "app名.UserInfo"
再次注意:
一旦咱們指定了新的認證系統所使用的表,咱們就須要從新在數據庫中建立該表,而不能繼續使用原來默認的auth_user表了。
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()