1. 程式人生 > >Django小範圍傻瓜總結

Django小範圍傻瓜總結

oot ora media 表達 步驟 oda 做什麽 頁面布局 bsp

1.母版:

  layout.html
  {% block x %}{% endblock %}

2.子版:

  {% extends ‘layout‘ %}
  {% block x %}.......{% endblock %}

3.Cookie

  在瀏覽器上保持的鍵值對,參數(超時時間,域名)

  服務器寫Cookie:
  #obj=HttpReponse(...)
  #obj=render(...)
  obj=redirect(...) #不一定是redirect三個中的任意一個都行
  obj.set_cookie(k1,v1,max_age) #max_age超時時間,過了這個時間就消失了
  obj.set_signed_cookie(k1,v1,max_age,salt=‘fff‘) #加鹽版
  獲取Cookie:
  request.COOKIES.get(‘k1‘)
  request.get_signed_cookie(‘k1‘.salt=‘fff‘) #接收加鹽版Cookie
  Cookie作用登錄和限制操作次數(投票)

[email protected]

5.後臺管理頁面布局

  左面菜單欄占200多,右邊全占用
  position:absolute;
  overlow:scroll;

  <div class=‘div1‘>
  <span class=‘span1‘>abc</span>
  </div>
  .div1:hover .span1{
  當鼠標移動到父標簽div的時候他的孩子span發生想要的變化
  }

  position中三個屬性:absolute,relative,fixed

之前:自己建立app01 自己創建目錄-view.py 用SQLHelper封裝SQL操作
這些工作django都已經內部做好了,今天就來發揮django10成的功力

6.三個框架

  Django:
    路由
    視圖
    模板
    ORM框架(本質上在內部,類-表,對象-行,連接數據庫還是用pymysql)

  Torando:
    路由
    視圖
    模板
    pymysql,SQLAchemy(沒有ORM框架可以隨便用,就是有也可以隨便用,但是既然有就用)
  flask:
    路由
    視圖
    模版(第三方組件)
    pymysql,SQLAchemy(也沒有ORM框架,瞎胡用)

7.app01目錄:

  migrations -數據庫相關使用的,講modal的時候會說
  admin -django在內部寫的一個後臺管理,用來配置後臺管理進去之後能做什麽操作,可以代替nevicate了
  apps -當前app01的相關的配置文件可以下在這裏
  models -django的ORM類就寫在這個文件裏面,類->表
  test -快速的做一個單元測試

8.路由系統

  url -> 函數
    a. /login/ -> def login
    b. /add-user/(\d+) -> def login 在url上還可以寫正則表達式
    c. get傳值:權重低,搜索結果在後面,百度爬蟲會認為?後面的東西會經常變
    d. .html偽靜態,靜態文件訪問速度快,增加權重,哄用戶,騙百度
    e. url(r‘^edit$‘, views.edit) 推薦用這個
    f. 偽靜態:
    類似靜態網站,一訪問就直接把模板返回,動態網站需要從數據庫拿
    點東西然後進行模板渲染在返回給瀏覽器,後者比較慢
    例:url(r‘^edit/(\w+).html$‘,views.edit)
    g. 路由分發:
    宗旨:讓每一個app裏面都有一個自己的url路由系統 include
    引入include通過他把引路 url(r‘^app01/‘,include(‘app01.urls‘))
    h. 起別名: url(r‘^index/(?P<a1>\d+)/‘, views.index,name=‘n1‘)
    根據名字反推出url:
    1.在Python中先導入reverse
    2.反生成url

  url分為三種:
    1.一對一
    2.正則表達式類的url,加幾節url就要在函數中對應有幾個參數接收
    3.include -- url分發

9.別名的運用:

  別名和ORM是Django框架特有的
  ***註意:
  如果是url一對一的話:在函數中也就是後臺通過reverse反轉的url,就是函數對應的url,這個沒毛用
  url正則情況:在函數中通過reverse反轉的url,開始斷不變其他隨意變的東東
  如果是前端替換的話:可以利用urls文件中寫的任意別名

--------------------------------------------------------------------- 
數據庫裏面存放著每個用可以看到的url表,比如:
方柯基:/index/a/b/c/d/e/
/login/a/b/c/d/e/
/duantui/a/b/c/d/e/
當用戶方柯基一登錄的時候,我們就要從數據庫拿到這些數據,再通過模板
渲染後發送給服務器,在模板中我們要循環這些url插入到a標簽中
<ul>
for url in url_list:
<li><a href=‘{{url}}‘>ff</a><li>
</ul>
但是這樣的話url很長,而且一眼看不出幹啥的,於是就有了別名
我們在數據庫就存這個
方柯基:n1
n2
n3
這樣我們在數據庫放的東西也少了,而且別名由我們自己取,我們
可以自己起一個適合的名字。渲染的時候變一下就可以了
<ul>
for name in name_list:
<li><a href=‘{% url name %}‘>ff</a><li>
</ul>
---------------------------------------------------------------------

10.視圖函數:

  CBV:圍繞類來寫,就是面向對象
  FBV:圍繞函數來寫,之前就是一直這麽搞

11.ORM操作

在HTTP請求中:
	url->視圖(模板+數據)

ORM功能:
	1.操作表
		創建表
		修改表sqlAlchemy不能修改表
		刪除表
	2.操作數據行
		增刪改查
	ORM利用pymysql等第三方工具去連接數據庫


	默認:連接數據庫用的是MySQLDB,需要修改為pymysql
		  Django連數據庫連得是SQLlite是文件型數據庫
	
需要修改的地方:
	1.將MySQLdb修改為pymysql
	2.把SQLlite改為mysql

步驟:
	CMD:
		django-admin startproject mysite6
		cd mysite6
		python manage.py startapp app01
		python manage.py startapp app02
		python manage.py startapp app03
		一個project裏面可以有多個app(一個app可以作為一個業務線)
	1.創建數據庫
	2.DATABASES = {
		‘default‘: {
		‘ENGINE‘: ‘django.db.backends.mysql‘,
		‘NAME‘:‘db6‘,
		‘USER‘: ‘root‘,
		‘PASSWORD‘: ‘‘,
		‘HOST‘: ‘localhost‘,
		‘PORT‘: 3306,
		}
	  }
	3.import pymysql
	  pymysql.install_as_MySQLdb()
	4.在models中創建:
		class UserInfo(models.Model):
		nid=models.BigAutoField(primary_key=True)
		username=models.CharField(max_length=32)
		password=models.CharField(max_length=64)
	5.註冊app01
	  INSTALLED_APPS = [
		‘django.contrib.admin‘,
		‘django.contrib.auth‘,
		‘django.contrib.contenttypes‘,
		‘django.contrib.sessions‘,
		‘django.contrib.messages‘,
		‘django.contrib.staticfiles‘,
		‘app01‘
	  ]
	6.創建數據表
		Python manage.py makemigrations
		python manage.py migrate

	7.class UserGroup(models.Model):
			‘‘‘
			部門
			‘‘‘
			title=models.CharField(max_length=32)

	  class UserInfo(models.Model):
			‘‘‘
			員工
			‘‘‘
			nid=models.BigAutoField(primary_key=True)   #AutoField 自動字段,這裏是自增字段相當於自增int類型
			user=models.CharField(max_length=32)
			password=models.CharField(max_length=64)
			# age=models.IntegerField(null=True)
			age=models.IntegerField(default=1)
			ug=models.ForeignKey("UserGroup",null=True)

  

Django小範圍傻瓜總結