一些容易搞混的問題

可變和不可變數據類型

基本數據類型都是不可變數據類型 數字,字符串,布爾值,元組 數據結構(容器)都是可變數據類型 列表,字典,集合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 %}
相關文章
相關標籤/搜索