python學習 - Django web應用開發入門
建立專案
原文1:http://blog.csdn.net/yjx2323999451/article/details/53200243
原文2:http://www.cnblogs.com/benshan/p/4445074.html
原文3:http://www.runoob.com/django/django-first-app.html
--------------------------------------------------------------------------------------
連線mysql資料庫
原文4:http://www.cnblogs.com/yangmv/p/5327477.html
原文5:http://www.cnblogs.com/taiguyiba/p/6058315.html
原文6:http://www.jb51.net/article/42870.htm
前提:
配置好python+django環境
1建立web伺服器:
使用cmd命令進入到存放專案的目錄中執行以下命令:
python django-admin.py startproject mysite
成功後會在目錄中出現 mysite 目錄,此處建立的為開發伺服器
2建立app:
一個專案中包含一個或多個這樣的app。app可以理解為一塊功能集合。比如產品管理模組就包含增刪該查等功能,可以把產品管理叫做一個app。
使用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>
-
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',
-
],
-
},
-
},
-
]
原文: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', //埠
-
}
-
}
>>> 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_name Admin中欄位的顯示名稱
-
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
原文: https://my.oschina.net/leeyd/blog/367688
增:create()
objects.create(name = 'test') # 新增name欄位的值為test
刪:delete()
objects.all().delete() # 刪除表中全部資料
objects.get(aa='test').delete() # 刪除一條aa等於'test'的資料
objects.filter(aa='123').delete() #過濾出aa欄位等於123的都刪除
改: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')
-
-