Django2.0單表圖書館系統開發流程

Django單表開發流程css

 

1、建立Django項目:html

  (1)cmd下python

    1.查看Django版本:python -m django --versionmysql

    2.建立Django項目:django-admin startproject mysite(cd到你要建立的文件下)git

    3.切換到Django項目目錄下,啓動Django:python manage.py runserversql

  (2)pycharm下數據庫

    1.New Project:建立新的Django項目(建議在more setting 中,可設置應用application namedjango

2、設置settings.py文件:app

(1)修改TEMPLATES中的'DIRS':函數

1 os.path.join(BASE_DIR,  'templates')

 

(2)若是想打印orm轉換過程當中的sql,須要在settings中進行以下配置:

 1 LOGGING = {  2     'version': 1,  3     'disable_existing_loggers': False,  4     'handlers': {  5         'console':{  6             'level':'DEBUG',  7             'class':'logging.StreamHandler',  8  },  9  }, 10     'loggers': { 11         'django.db.backends': { 12             'handlers': ['console'], 13             'propagate': True, 14             'level':'DEBUG', 15  }, 16  } 17 }

(3)把settings自帶的DATABASES替換成本身的:

DATABASES = { 'default':{ 'ENGINE': 'django.db.backends.mysql',  # 改爲所用的數據庫
        'NAME':'library',  # 要鏈接的數據庫,鏈接前在帳號下須要建立好數據庫
        'USER':'root2',  # 鏈接數據庫的用戶名
        'PASSWORD':'123',  # 鏈接數據庫的密碼
        'HOST':'127.0.0.1',  # 鏈接主機默認本機
        'POST':3306  # 端口 默認3306
 } }

(4)若是INSTALLED_APPS裏沒有應用的名稱,須要手動添加「application name」

(5)管理不一樣應用的css/js等靜態文件:在一個應用裏建立static文件夾,用於管理文件

  結構:

  settings.py:添加代碼

STATICFILES_DIRS=[ os.path.join(BASE_DIR, "static"), ]

 

3、爲應用配置models.py

(1)models.py用於建立表結構:以後表的增刪改查所有由該類的對象進行操做

 1 from django.db import models #必須導入  2 
 3 # Create your models here.
 4 
 5 class Book(models.Model): # 類必定要繼承models.Model  6     id = models.AutoField(primary_key=True)#AutoField:自增;primary_key:主鍵
 7     title = models.CharField(max_length=32)#CharField:字符串
 8     pub_date = models.DateField()  9     price = models.DecimalField(max_digits=8, decimal_places=2)#相似於double,精讀高的浮點數,max_digits最大位數(包括decimal小數部分),decimal小數部分
10     publish = models.CharField(max_length=32) 11 
12     #打印對象,默認打印一長串object屬性
13     #__str__當對象生成的時候自動觸發
14     def __str__(self): 15 return self.title # 打印對象的QuerySet類型

(2)必定要在項目全局文件中的__init__中設置:

1 import pymysql 2 
3 pymysql.install_as_MySQLdb()

 

 

 

(3)建立完以後必定要運行:進行python語句和sql語句的轉換

1 兩條數據庫遷移命令便可在指定的數據庫中建立表 : 2 python manage.py makemigrations 3 python manage.py migrate

4、urls裏配置路由

(1)導入建立應用的views

1 from django.urls import path, re_path 2 from app01  import views

(2)配置路由

urlpatterns = [ path('admin/', admin.site.urls), path('book/', views.book), path('addbook/', views.addbook), re_path('^$', views.book), re_path(r"book/(\d+)/delete", views.delbook) , # (\d+)捕獲數字 delbook(request,數字)
    re_path(r"book/(\d+)/change", views.changebook)  # (\d+)捕獲數字 delbook(request,數字)
 ]

(3)若是有多個應用,則應該使用分發:讓每個應用有單獨本身的url路徑

  第一步:爲每個應用建立一個urls.py進行分流

  第二步:在全局urls中進行分發:

1     #分發:
2     #讓每個應用有單獨本身的url路徑
3     re_path(r"app01/",include(("app01.urls","app01"))),  # include(('',''))建立兩個房間,第二個參數:namespace用來區別一樣的urls
4     re_path(r"app02/",include(("app02.urls","app02"))), 5 
6     #去掉app01/的分發:
7     re_path(r"^",include("app01.urls")), 8 
9     path("articles/<mm:month>/", views.month)

 

 

5、建立對應的視圖函數

(1)導入必要的模塊

from django.shortcuts import render, HttpResponse, redirect

(2)視圖函數都須要有返回值return,一般返回值有三種

1 return render(request, 'changebook.html',{"book_obj":book_obj}) # 給html傳入值須要遵循格式:{"book_obj":變量} 2 return HttpResponse("Hello World") 3 return redirect("/book")  # 進行重定向,再也不須要在form表單action裏進行定義

(3)獲取input標籤裏的值(input標籤裏必定要定義name="",才能從請求中根據name找到對應的value):

1     if request.method == 'POST':  # 判斷請求方式
2         title = request.POST.get("title") 3         price = request.POST.get("price") 4         pub_date = request.POST.get("pub_date") 5         publish = request.POST.get("publish") 6 
7#添加表數據,須要導入表對象Book
 8 book_obj = Book.objects.create(title=title, price=price, pub_date=pub_date, publish=publish)

(4)表對象的各類obj.object.操做:

首先導入須要用到的表:

from app01.models import Book

從表中拿到input收集到的各類value

book_list = Book.objects.all()  # [obj1,obj2....]

經過render傳入變量

return render(request,'book.html',locals())  #local()傳入該函數局部變量

(5)模板語法

html頁面for循環添加table-tbody元素(元素由render傳入的變量提供)

 1 <tbody>
 2     {% for book in book_list %}  3         <tr>
 4             <td>{{ book.title }}</td>  #經過模板語法{{}}調用表對象的屬性
 5             <td>{{ book.price }}</td>
 6             <td>{{ book.pub_date|date:"Y-m-d" }}</td>  # 經過過濾器|date:"參數"改變日期格式
 7             <td>{{ book.publish }}</td>
 8             <td>
 9 <a href="/book/{{ book.pk }}/delete" class="btn btn-danger">刪除</a>  # pk爲表的自增主鍵,自動查找
10        </td>
11             <td>
12 <a href="/book/{{ book.pk }}/change" class="btn btn-info">編輯</a>
13        </td>
14         </tr>
15     {% endfor %} 16 </tbody>

點擊刪除按鈕刪除數據:經過a標籤跳轉到帶有對應ID的數據庫數據url(全局url路由器裏)一般在網頁上對數據進行操做都須要定義一個url(r"xx/(\d+)/xxx")格式專門用於操做

re_path(r"book/(\d+)/delete", views.delbook) , # (\d+)捕獲數字 delbook(request,數字)

經過模板語法進行刪除;再返回該頁面(redirect)

1 def delbook(request, id): 2 
3     Book.objects.filter(id=id).delete()  # 刪除book.pk對應的ID的數據
4 
5     #刪除後進行重定向須要導入redirect
6     return redirect("/book")

修改數據:與刪除同樣拿到數據惟一的ID,進行修改

 1 def changebook(request, id):  2     #a標籤進入的頁面默認爲get
 3     #無論是什麼請求進入的changebook都獲取book_obj
 4     book_obj = Book.objects.filter(id=id).first()  #first() 拿到queryset的第一個對象
 5 
 6     if request.method == "POST":  7         title = request.POST.get("title")  8         price = request.POST.get("price")  9         pub_date = request.POST.get("pub_date") 10         publish = request.POST.get("publish") 11 
12         #當進入編輯頁面後點擊提交,進入post,對數據進行修改
13         book_obj = Book.objects.filter(id=id).update(title=title, price=price, pub_date=pub_date, publish=publish) 14 
15         return redirect("/book") 16 
17 
18     return render(request, 'changebook.html',{"book_obj":book_obj})

 

總結:

1.要在html文件里根據數據庫生成標籤需熟練運用模板語法for:

1     {% for person in person_list %}  # 循環對象列表2         <p>{{ forloop.counter }} {{ person.name }},{{ person.age }}</p>  # 兩個變量之間可設置不一樣的分隔符,forloop爲索引
    {% empty %} #若是列表爲空就打印empty後的標籤內容5 <p>列表爲空</p> 6 {% endfor %}

2.在登陸註冊界面中,常常運用模板語法if

 1     {% if user %}  2         <p>
 3             <a href="">hi {{ user }}</a>
 4             <a href="">註銷</a>
 5         </p>
 6     {% else %}  7         <p>
 8             <a href="">登錄</a>
 9             <a href="">註冊</a>
10         </p>
11     {% endif %}

 

3.一般按鈕的跳轉頁面,在views.py中return redirect("/url/")進行重定向  /  a標籤訂義的按鈕使用href="/url/"進行頁面跳轉

4.有按鈕的地方就有post訪問,則視圖函數中一般會進行if request.method對請求進行判斷,讓網頁return到不一樣的頁面

相關文章
相關標籤/搜索