Python-Django-Ajax進階2

-forms組件的渲染錯誤信息

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

 

 

-forms使用bootstrap樣式

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

 

-全局和局部鉤子函數

AOP:面向切面編程django

-局部鉤子函數(再校驗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')bootstrap

 

 

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 表來存儲用戶數據。cookie

 

擴展默認的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

注意:session

按上面的方式擴展了內置的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:

 

 

 

 

相關文章
相關標籤/搜索