1. 程式人生 > >python學習 - Django web應用開發入門

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。

每個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檔案,輸入以下內容


  
  1. from django.http import HttpResponse
  2. def sayHello(request):
  3. s = 'Hello World!'
  4. current_time = datetime.datetime.now()
  5. html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time)
  6. return HttpResponse(html)


7url對映的配置

開啟url.py檔案


  
  1. from django.conf.urls import url
  2. from test_pr import views
  3. urlpatterns = [
  4. # url(r'^admin/', admin.site.urls),
  5. url( r'^$', views.sayHello),
  6. ]

重啟服務,訪問http://localhost:8000/


8邏輯和頁面分離

8.1在模板目錄下建立一個student.html檔案,並寫入以下程式碼


  
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>hello </title>
  5. </head>
  6. <body>
  7. <ul>
  8. {% for student in students %}
  9. <li>
  10. id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}
  11. </li>
  12. {% endfor %}
  13. </ul>
  14. </body>
  15. </html>


8.2修改 views.py檔案,新增方法showStudents()


  
  1. def showStudents(request):
  2. list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]
  3. return render_to_response( 'student.html',{ 'students': list})

8.3.新增url對映,開啟url.py檔案


  
  1. from django.conf.urls import url
  2. from test_pr import views
  3. urlpatterns = [
  4. # url(r'^admin/', admin.site.urls),
  5. url( r'^$', views.sayHello),
  6. url( r'^showStudents$', showStudents),
  7. ]

8.4.修改settings.py模板配置:'DIRS': [BASE_DIR+r'\templates'],


  
  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [BASE_DIR+ "/templates", ],
  5. 'APP_DIRS': True,
  6. 'OPTIONS': {
  7. 'context_processors': [
  8. 'django.template.context_processors.debug',
  9. 'django.template.context_processors.request',
  10. 'django.contrib.auth.context_processors.auth',
  11. 'django.contrib.messages.context_processors.messages',
  12. ],
  13. },
  14. },
  15. ]


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檔案編寫程式碼


  
  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql', //資料庫的型別
  4. 'NAME': 'mysite', //所使用的的資料庫的名字
  5. 'USER': 'root', //資料庫伺服器的使用者
  6. 'PASSWORD': '123456', //密碼
  7. 'HOST': 'localhost', //主機
  8. 'PORT': '3306', //埠
  9. }
  10. }


修改完後進入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


  
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.db import models
  4. # Create your models here.
  5. class Student(models.Model):
  6. name = models.CharField(max_length= 20)


欄位



  
  1. 1、models.AutoField  自增列= int( 11)
  2.   如果沒有的話,預設會生成一個名稱為 id 的列,如果要顯示的自定義一個自增列,必須將給列設定為主鍵 primary_key= True
  3. 2、models.CharField  字串欄位
  4.   必須 max_length 引數
  5. 3.models.DateField  日期型別 date
  6.   對於引數,auto_now = True則每次更新都會更新這個時間;auto_now_add 則只是第一次建立新增,之後的更新不再改變。
  7. 4.models.DateTimeField  日期型別 datetime
  8.   同DateField的引數
  9. 5.models.EmailField  字串型別(正則表示式郵箱)=varchar
  10.   對字串進行正則表示式
  11. 6.models.FloatField  浮點型別= double
  12. 7.models.IntegerField  整形
  13. 8.models.SmallIntegerField  數字
  14.   資料庫中的欄位有:tinyint、smallint、 int、bigint
  15. 9、models.TextField  字串=longtext
  16. 10、models.TimeField  時間 HH:MM[:ss[.uuuuuu]]
  17. 11、models.URLField  字串,地址正則表示式
  18. 12、models.BinaryField  二進位制
  19. 13、models.ImageField圖片
  20. 14、models.FilePathField檔案

引數



  
  1. 1、null= True
  2.   資料庫中欄位是否可以為空
  3. 2、blank= True
  4.   django的Admin中新增資料時是否可允許空值
  5. 3、primary_key = False
  6.   主鍵,對AutoField設定主鍵後,就會代替原來的自增 id 列
  7. 4、auto_now 和 auto_now_add
  8.   auto_now 自動建立---無論新增或修改,都是當前操作的時間
  9.   auto_now_add 自動建立---永遠是建立時的時間
  10. 5、choices
  11. GENDER_CHOICE =(
  12. ( u'M', u'Male'),
  13. ( u'F', u'Female'),
  14. )
  15. gender = models.CharField(max_length= 2,choices = GENDER_CHOICE)
  16. 6、max_length
  17. 7、default  預設值
  18. 8、verbose_name  Admin中欄位的顯示名稱
  19. 9、name|db_column  資料庫中的欄位名稱
  20. 10、unique= True  不允許重複
  21. 11、db_index = True  資料庫索引
  22. 12、editable= True  在Admin裡是否可編輯

11. 啟用 模型

開啟settings.py 檔案,找到 INSTALLED_APPS 設定,NSTALLED_APPS 告訴 Django 專案哪些 app 處於啟用狀態


  
  1. INSTALLED_APPS = (
  2. 'django.contrib.auth',
  3. 'django.contrib.contenttypes',
  4. 'django.contrib.sessions',
  5. 'django.contrib.sites',
  6. 'test_pr',
  7. )

12.將新建的models同步資料庫

# Django 1.7 及以上的版本需要用以下命令

-----------------------------------------------------------------------------------------------------------------

步驟裡面第一步將會在查詢當前MySQL和本地的models的差異,生成合並的程式碼。 

第二步是將合併程式碼匯入資料庫。

cmd進入專案目錄執行以下命令:


  
  1. python manage.py makemigrations
  2. 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檔案

方式一:


  
  1. from django.db import models
  2. class Student(models.Model):
  3. name= models.CharField(max_length= 20)
  4. @classmethod
  5. def create(cls, name
  6. student = cls(name=name)
  7. # do something with the book
  8. return student
  9. student = Student.create("zhansan")

方式二(推薦):


  
  1. from django.db import models
  2. # Create your models here.
  3. class Student(models.Model):
  4. # 如果沒有models.AutoField,預設會建立一個id的自增列
  5. name = models.CharField(max_length= 20)
  6. # model的字串表現形式
  7. def __unicode__(self):
  8. return self.name
  9. objects = StudentManager()
  10. class StudentManager(models.Manager):
  11. def create_student(self, name):
  12. student = self.create(name=name)
  13. # do something with the book
  14. 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


  
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.db import models
  4. class StudentManager(models.Manager):
  5. def create_student(self, name):
  6. # 方式一
  7. # student = Student(name = name)
  8. # # 儲存到資料庫
  9. # student.save()
  10. # 方式二(推薦)
  11. student = self.create(name=name)
  12. return student
  13. def select_all(self):
  14. # 查詢全部
  15. list = self.all()
  16. return list
  17. def select_one(self, name):
  18. # a = []
  19. # # 查詢單條資料
  20. # student = self.get(id=id)
  21. # a.append(student)
  22. # return a
  23. # 查詢匹配條件的多條資料
  24. # student = self.filter(name=name)
  25. # 模糊查詢
  26. student = self.filter(name__contains=name)
  27. # 根據欄位內容排序後展示資料,根據欄位內容逆向排序後展示資料,加一個負號order_by('-name')
  28. tt = student.order_by( 'name')