可變和不可變數據類型
基本數據類型都是不可變數據類型 數字,字符串,布爾值,元組 數據結構(容器)都是可變數據類型 列表,字典,集合html
不一樣下劃線變量的含義
_單下劃線開頭:弱「內部使用」標識,如:」from M import *」,將不導入全部如下劃線開頭的對象,包括包、模塊、成員 __雙下劃線開頭:模塊內的成員,表示私有成員,外部沒法直接調用 __雙下劃線開頭雙下劃線結尾__:指那些包含在用戶沒法控制的命名空間中的「魔術」對象或屬性,如類成員的__name__等。
面向對象若干
super 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,可是若是使用多繼承,會涉及到查找順序(MRO)、重複調用(鑽石繼承)等種種問題。python
Python內置的@ property裝飾器就是負責把一個方法變成屬性調用mysql
getattr(obj,"name") = obj.nameajax
django URL 問題
url:路徑斜槓問題 當加/的時候,是從根目錄拼接(從settings配置的路徑出發也加/) 當沒有加/的時候,是從當前路徑拼接sql
rest_framework視圖繼承
from django.views import View from rest_framework.views import APIView from rest_framework.viewsets.generics import GenericAPIView # 路由:CourseView.as_view(), 自動觸發get/post/delete等方法 from rest_framework.viewsets import GenericViewSet from rest_framework.viewsets import ModelViewSet # 路由:CourseView.as_view({'get':'list',...}), 自動觸發get/post/delete等方法
用formdata和ajax方式上傳文件
var formdata=new FormData(); formdata.append("pwd",$("#pwd").val()); formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val()); formdata.append("f",$("#file")[0].files[0]); # 文件上傳方式,格式化到formdata中 $.ajax({url:"", type:"post", data:formdata, contentType:false, processData:false,})
F和Q查詢
Django 支持 F() 對象之間以及 F() 對象和常數之間的加減乘除和取模的操做。 修改操做也可使用F函數,好比將每一本書的價格提升30元數據庫
例:把全部書名後面加上(初版)django
from django.db.models.functions import Concat from django.db.models import Value models.Book.objects.all().update(title=Concat(F("title"), Value("("), Value("初版"), Value(")")))緩存
Q查詢: Q(條件1) | Q(條件2) 或 Q(條件1) & Q(條件2) 且 Q(條件1) & ~Q(條件2) 非restful
from django.db.models import Avg, Max, Min, Count, Sum數據結構
聚合aggregate() # 求最貴的那本書 models.Book.objects.all().aggregate(max_price=Max("price"))
分組annotate() # 將全部的書按做者分組,統計每一個做者最貴的書 models.Author.objects.all().annotate(author_max=Max("books__price")) 最後獲得的是一個QuerySet()對象,裏面的每一個數據對象都多了一個author_max字段
Django 導入和配置
import pymysql pymysql.install_as_MySQLdb() # 修改數據庫爲MySQLdb makemigrations 數據遷移 migrate 執行數據遷移 python manage.py startapp APP名 新建APP ============URLS導入================= from django.conf.urls import url,include from django.contrib import admin from APP名 import views from 項目名 import settings url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}), ============views導入=============== from django.shortcuts import HttpResponse,render,redirect from django.contrib import auth # from .models import UserInfo from APP名.models import * from APP名.forms import * ============models導入============== from django.db import models from django.contrib.auth.models import AbstractUser =============admin導入================ from django.contrib import admin from APP名.models import * admin.site.register(表名) ============forms導入================ from django import forms from django.forms import widgets from django.core.exceptions import ValidationError from APP名.models import * ~~~~~~~~~~~~~~~~restful視圖部分~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ from .models import * from django.shortcuts import HttpResponse from rest_framework.views import APIView from rest_framework.response import Response from django.core import serializers from django.utils.deprecation import MiddlewareMixin # 中間件導入 from functools import wraps # 登錄驗證時裝飾器內部的裝飾器 from django.utils.decorators import method_decorator # CBV視圖中加入登陸驗證裝飾器 from app名字 import models 查詢以前從APP中導入模型 from django.db.models import F,Q,Avg,Sum,Max,Min,Count,Value 導入F查詢和Q查詢,聚合函數和分組函數 ===============setting配置================= DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': "day74", "USER": "root", "PASSWORD": "123456", "HOST": "127.0.0.1", "PORT": 3306 } } -------------------------------------- INSTALLED_APPS = [ ... ... 'app名字.apps.App01Config' ] --------------------------------------- STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static") ] --------------------------------------- AUTH_USER_MODEL="APP名字.UserInfo" --------------------------------------- MEDIA_URL="/media/" MEDIA_ROOT=os.path.join(BASE_DIR,"app名字","media") # 同時要在URL中配置media url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}), ------------------------------------ # 日至相關的配置項 LOGGING = { 'version': 1, # 目前爲止有且只有這一個值 'disable_existing_loggers': False, # 不由用已經存在的logger實例 # 定義一些日誌的處理方式 'handlers': { 'console': { 'level': 'DEBUG', # handle的日誌級別 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, # 向上傳導 'level': 'DEBUG', # logger實例的日誌級別 }, } }
緩存粒度
緩存 三種粒度緩存 1 中間件級別 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', CACHE_MIDDLEWARE_SECONDS=10 2 視圖級別 from django.views.decorators.cache import cache_page @cache_page(15) def index(request): import time t=time.time() return render(request,"index.html",locals()) 3 局部緩存 {% load cache %} ... ... {% cache 15 "time_cache" %} <h3>緩存時間:{{ t }}</h3> {% endcache %}