上節內容回顧:
1、Django請求生命週期
-> URL對應關係(匹配) -> 視圖函數 -> 返回用戶字符串
-> URL對應關係(匹配) -> 視圖函數 -> 打開一個HTML文件,讀取內容
2、創建django projcet
django-admin startproject mysite
..
mysite
mysite
- 配置文件
- url.py
- settings.py
cd mysite
python manage.py startapp cmdb
mysite
mysite
- 配置文件
- url.py
- settings.py
cmdb
- views.py
- admin.py
- models.py # 創建數據庫表
3、配置
模板路徑
靜態文件路徑
# CSRF
4、編寫程序
a. url.py
/index/ -> func
b. views.py
def func(request):
# 包含所有的請求數據
...
return HttpResponse('字符串')
return render(request, 'index.html', {''})
retrun redirect('URL')
c. 模板語言
return render(request, 'index.html', {'li': [11,22,33]})
{% for item in li %}
<h1>{{item}}</h1>
{% endfor %}
*********** 索引用點 **********
<h2> {{item.0 }} </h2>
一、路由系統,URL
1、url(r'^index/', views.index),
url(r'^home/', views.Home.as_view()),
2、url(r'^detail-(\d+).html', views.detail),
3、url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
PS:
def detail(request, *args,**kwargs):
pass
實戰:
a.
url(r'^detail-(\d+)-(\d+).html', views.detail),
def func(request, nid, uid):
pass
def func(request, *args):
args = (2,9)
def func(request, *args, **kwargs):
args = (2,9)
b.
url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
def func(request, nid, uid):
pass
def funct(request, **kwargs):
kwargs = {'nid': 1, 'uid': 3}
def func(request, *args, **kwargs):
args = (2,9)
4、 name
對URL路由關係進行命名, ***** 以後可以根據此名稱生成自己想要的URL *****
url(r'^asdfasdfasdf/', views.index, name='i1'),
url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
def func(request, *args, **kwargs):
from django.urls import reverse
url1 = reverse('i1') # asdfasdfasdf/
url2 = reverse('i2', args=(1,2,)) # yug/1/2/
url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
xxx.html
{% url "i1" %} # asdfasdfasdf/
{% url "i2" 1 2 %} # yug/1/2/
{% url "i3" pid=1 nid=9 %} # buy/1/9/
注:
# 當前的URL
request.path_info
5、多級路由
project/urls.py
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^cmdb/', include("app01.urls")),
url(r'^monitor/', include("app02.urls")),
]
app01/urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^login/', views.login),
]
app02/urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app02 import views
urlpatterns = [
url(r'^login/', views.login),
]
6、默認值(欠)
7、命名空間(欠)
二、視圖
1、獲取用戶請求數據
request.GET
request.POST
request.FILES
PS:
GET:獲取數據
POST:提交數據
2、checkbox等多選的內容
request.POST.getlist()
3、上傳文件
# 上傳文件,form標籤做特殊設置
obj = request.FILES.get('fafafa')
obj.name
f = open(obj.name, mode='wb')
for item in obj.chunks():
f.write(item)
f.close()
4、FBV & CBV
function base view
url.py
index -> 函數名
view.py
def 函數(request):
...
====》
/index/ -> 函數名
/index/ -> 類
====》
建議:兩者都用
5、裝飾器
欠
三、模板
欠
四、ORM操作
select * from tb where id > 1
# 對應關係
models.tb.objects.filter(id__gt=1)
models.tb.objects.filter(id=1)
models.tb.objects.filter(id__lt=1)
創建類
a. 先寫類
from django.db import models
# app01_userinfo
class UserInfo(models.Model):
# id列,自增,主鍵
# 用戶名列,字符串類型,指定長度
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
b. 註冊APP
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
c. 執行命令
python manage.py makemigrations
python manage.py migrate
d. ** 注意 ***
Django默認使用MySQLdb模塊鏈接MySQL
主動修改爲pymysql,在project同名文件夾下的__init__文件中添加如下代碼即可:
import pymysql
pymysql.install_as_MySQLdb()
1. 根據類自動創建數據庫表
# app下的models.py
python manage.py makemigrations
python manage.py migrate
字段:
字符串類型
數字
時間
二進制
自增(primary_key=True)
字段的參數:
null -> db是否可以爲空
default -> 默認值
primary_key -> 主鍵
db_column -> 列名
db_index -> 索引
unique -> 唯一索引
unique_for_date ->
unique_for_month
unique_for_year
auto_now -> 創建時,自動生成時間
auto_now_add -> 更新時,自動更新爲當前時間
# obj = UserGroup.objects.filter(id=1).update(caption='CEO')
# obj = UserGroup.objects.filter(id=1).first()
# obj.caption = "CEO"
# obj.save()
choices -> django admin中顯示下拉框,避免連表查詢
blank -> django admin是否可以爲空
verbose_name -> django admin顯示字段中文
editable -> django admin是否可以被編輯
error_messages -> 錯誤信息欠
help_text -> django admin提示
validators -> django form ,自定義錯誤信息(欠)
創建 Django 用戶:python manage.py createsuperuser
2. 根據類對數據庫表中的數據進行各種操作
一對多:
a. 外檢
b.
外鍵字段_id
c.
models.tb.object.create(name='root', user_group_id=1)
d.
userlist = models.tb.object.all()
for row in userlist:
row.id
row.user_group_id
row.user_group.caption
=================== 作業:用戶管理 ====================
1、用戶組的增刪改查
2、用戶增刪該查
- 添加必須是對話框
- 刪除必須是對話框
- 修改,必須顯示默認值
3、比較好看的頁面
4、預習:
http://www.cnblogs.com/wupeiqi/articles/5246483.html