1建立web伺服器:
使用cmd命令進入到存放專案的目錄中執行以下命令:
python django-admin.py startproject mysite
成功後會在目錄中出現 mysite 目錄,此處建立的為開發伺服器
2建立app:
一個專案中包含一個或多個這樣的app。app可以理解為一塊功能集合。比如產品管理模組就包含增刪該查等功能,可以把產品管理叫做一個app。每個Django app都有獨立的models,views等,易移植和被複用
使用cmd命令進入到mysite目錄下(建立的web伺服器目錄)執行以下命令
python manage.py startapp test_pr
test_pr才是web應用程式
3建立模板檔案的目錄
在專案根目錄下新建一個templates目錄
4目錄檔案說明
子目錄mysite下表示工程的全域性配置,分別為setttings.py、urls.py和wsgi.py,其中setttings.py包括了系統的資料庫配置、應用配置和其他配置,urls.py則表示web工程Url對映的配置。
子目錄test_pr則是在該工程下建立的app,包含了models.py、tests.py和views.py等檔案
templates目錄則為模板檔案的目錄
manage.py是Django提供的一個管理工具,可以同步資料庫等等
-----------------------------------------------------------------------------------------------------------------------------------------------
Django 裡更關注的是模型(Model)、模板(Template)和檢視(Views),Django 也被稱為 MTV 框架 。
在 MTV 開發模式中:
M 代表模型(Model),即資料存取層。該層處理與資料相關的所有事務:如何存取、如何確認有效性、包含哪些行為以及資料之間的關係等
T 代表模板(Template),即表現層。該層處理與表現相關的決定:如何在頁面或其他型別文件中進行顯示。
V代表View,業務邏輯層。這一層包含訪問模型的邏輯和按照模板顯示。你可以認為它是模型和模板的橋樑。
系統對app有一個約定:如果你使用了Django的資料庫層(模型),你 必須建立一個django app。模型必須在這個app中存在。
5啟動
在cmd中進入專案目錄(cd d:*/mysite ),執行以下命令:
python manage.py runserver 0.0.0.0:8000
在瀏覽器中輸入 127.0.0.1:8000,若能成功訪問則表示啟動成功
6新增web工程頁面
開啟test_pr/views.py檔案,輸入以下內容
from django.http import HttpResponse
def sayHello(request):
s = 'Hello World!'
current_time = datetime.datetime.now()
html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time)
return HttpResponse(html)
7url對映的配置
開啟url.py檔案
from django.conf.urls import url
from test_pr import views
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^$', views.sayHello),
]
重啟服務,訪問http://localhost:8000/
8邏輯和頁面分離
8.1在模板目錄下建立一個student.html檔案,並寫入以下程式碼
<!DOCTYPE html>
<html>
<head>
<title>hello</title>
</head>
<body>
<ul>
{% for student in students %}
<li>
id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}
</li>
{% endfor %}
</ul>
</body>
</html>
8.2修改 views.py檔案,新增方法showStudents()
def showStudents(request):
list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]
return render_to_response('student.html',{'students': list})
8.3.新增url對映,開啟url.py檔案
from django.conf.urls import url
from test_pr import views
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^$', views.sayHello),
url(r'^showStudents$', showStudents),
]
8.4.修改settings.py模板配置:'DIRS': [BASE_DIR+r'\\templates'],
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR+"/templates", ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
8.5.重啟服務,訪問http://localhost:8000/showStudents,出現:
原文:http://code.ziqiangxuetang.com/django/django-models.html
9.連線資料庫
首先需要安裝資料庫驅動啦,即mysql_python,
如果你沒安裝 mysql 驅動,可以執行以下命令安裝:
pip install mysqlclient
9.1配置資料庫連線,開啟settings.py檔案編寫程式碼
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', //資料庫的型別
'NAME': 'mysite', //所使用的的資料庫的名字
'USER': 'root', //資料庫伺服器的使用者
'PASSWORD': '123456', //密碼
'HOST': 'localhost', //主機
'PORT': '3306', //埠
}
}
修改完後進入DOS進入專案目錄下執行python manage.py shell命令啟動互動介面輸入一下程式碼驗證資料庫配置是否成功。沒報錯則成功!
>>> from django.db import connection
>>> cursor = connection.cursor()
10.建立模型
在Django中使用資料庫佈局的第一步是將其表述為Python程式碼。
檔案中每個class相當於單個數據庫表,每個屬性也是這個表中的一個欄位。 屬性名就是欄位名,它的型別(例如 CharField )相當於資料庫的欄位型別 (例如 varchar )。
10.1開啟test_pr目錄下的models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=20)
欄位
1、models.AutoField自增列= int(11)
如果沒有的話,預設會生成一個名稱為 id 的列,如果要顯示的自定義一個自增列,必須將給列設定為主鍵 primary_key=True。
2、models.CharField字串欄位
必須 max_length 引數
3.models.DateField日期型別 date
對於引數,auto_now =True則每次更新都會更新這個時間;auto_now_add 則只是第一次建立新增,之後的更新不再改變。
4.models.DateTimeField日期型別 datetime
同DateField的引數
5.models.EmailField字串型別(正則表示式郵箱)=varchar
對字串進行正則表示式
6.models.FloatField浮點型別= double
7.models.IntegerField整形
8.models.SmallIntegerField數字
資料庫中的欄位有:tinyint、smallint、int、bigint
9、models.TextField字串=longtext
10、models.TimeField時間 HH:MM[:ss[.uuuuuu]]
11、models.URLField字串,地址正則表示式
12、models.BinaryField二進位制
13、models.ImageField圖片
14、models.FilePathField檔案
引數
1、null=True
資料庫中欄位是否可以為空
2、blank=True
django的Admin中新增資料時是否可允許空值
3、primary_key =False
主鍵,對AutoField設定主鍵後,就會代替原來的自增 id 列
4、auto_now 和 auto_now_add
auto_now 自動建立---無論新增或修改,都是當前操作的時間
auto_now_add 自動建立---永遠是建立時的時間
5、choices
GENDER_CHOICE =(
(u'M', u'Male'),
(u'F', u'Female'),
)
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
6、max_length
7、default預設值
8、verbose_nameAdmin中欄位的顯示名稱
9、name|db_column資料庫中的欄位名稱
10、unique=True不允許重複
11、db_index =True資料庫索引
12、editable=True在Admin裡是否可編輯
11. 啟用 模型
開啟settings.py 檔案,找到 INSTALLED_APPS 設定,NSTALLED_APPS 告訴 Django 專案哪些 app 處於啟用狀態
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'test_pr',
)
12.將新建的models同步資料庫
# Django 1.7 及以上的版本需要用以下命令
-----------------------------------------------------------------------------------------------------------------
步驟裡面第一步將會在查詢當前MySQL和本地的models的差異,生成合並的程式碼。
第二步是將合併程式碼匯入資料庫。
cmd進入專案目錄執行以下命令:
python manage.py makemigrations
python manage.py migrate
# Django 1.6.x 及以下
----------------------------------------------------------------------------------------------------------------
用下面的命令對校驗模型的有效性:
python manage.py validate
看到 0 errors found 訊息,一切正常。繼續:
執行下面的命令來生成 CREATE TABLE 語句:
python manage.py sqlall test_pr
sqlall 命令並沒有在資料庫中真正建立資料表,只是把SQL語句段打印出來。
執行 syncdb 命令建立表
python manage.py syncdb
--------------------------------------------------------------------------------------------------------
所有的資料庫查詢都遵循一個通用模式:呼叫模型的管理器來查詢資料。
13.models對資料庫增刪查改
原文:http://python.usyiyi.cn/translate/django_182/ref/models/instances.html
開啟models.py檔案
方式一:
from django.db import models
class Student(models.Model):
name= models.CharField(max_length=20)
@classmethod
def create(cls, name
student = cls(name=name)
# do something with the book
return student
student = Student.create("zhansan")
方式二(推薦):
from django.db import models
# Create your models here.
class Student(models.Model):
# 如果沒有models.AutoField,預設會建立一個id的自增列
name = models.CharField(max_length=20)
# model的字串表現形式
def __unicode__(self):
return self.name
objects = StudentManager()
class StudentManager(models.Manager):
def create_student(self, name):
student = self.create(name=name)
# do something with the book
return student
原文:/file/2019/11/12/20191112120450_11598.jpg = 'test') # 新增name欄位的值為test
刪:delete()
改:update()
get(id=id).update(name=name)
查:all()、get()
get(id=id) # 查詢單條資料
filter(name=name) # 查詢匹配條件的多條資料
filter(name__contains=name) # 模糊查詢;name為查詢的欄位名
filter(name__contains=name)[0:5] # [0]顯示第一條 [0:2]會顯示前兩條,切片不支援負數
dome
# models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
class StudentManager(models.Manager):
def create_student(self, name):
# 方式一
# student = Student(name = name)
# # 儲存到資料庫
# student.save()
# 方式二(推薦)
student = self.create(name=name)
return student
def select_all(self):
# 查詢全部
list = self.all()
return list
def select_one(self, name):
# a = []
# # 查詢單條資料
# student = self.get(id=id)
# a.append(student)
# return a
# 查詢匹配條件的多條資料
# student = self.filter(name=name)
# 模糊查詢
student = self.filter(name__contains=name)
# 根據欄位內容排序後展示資料,根據欄位內容逆向排序後展示資料,加一個負號order_by('-name')
tt = student.order_by('name')
# 限制資料條數, 相當於mysql limit
tt1 = self.filter(name__contains=name)[0:5] # [0]顯示第一條 [0:2]會顯示前兩條,切片不支援負數
return tt1
def updata_student(self, id, name):
self.get(id=id).update(name=name) # update可多條update(name=name, bb="wahaha")
# Create your models here.
class Student(models.Model):
# 如果沒有models.AutoField,預設會建立一個id的自增列
name = models.CharField(max_length=20)
# model的字串表現形式
def __unicode__(self):
return self.name
objects = StudentManager()