1. 程式人生 > >django 框架搭建 重定向

django 框架搭建 重定向


模型:承載資料的物件並提供了對資料的curd(增刪改查)
  模性類必須繼承models.Model類或子段:
  class BlogUser(models.Model)
      欄位:
      username = models.CharField(max_length=30)
      pwd = models.CharField(max_length=32)

在MySQL資料庫裡建立一個數據庫為(資料庫名:pyblog_db 字符集為:utf_8)
pyblogsys
  settings.py  (設定)
      更改django的資料庫連結引擎
      DATABASES   (django driver mysqlclient 1.3.7+) django要安裝一個驅動程式(driver)mysqlclient 1.3.7+
                   安裝驅動程式在DOS命令下輸入 pip linstall mysqlclient
      DATABASES = {  (資料庫)
        'default';{  (預設)
            ‘ENGINE':'django.db.backends.mysql', (引擎)
             'NAME':'pyblog_db', (名字)
             'USER':'root',       (使用者)
             'PASSWORD':'mysql的密碼', (密碼)
             'HOST':'locahost',  (機主)
             'PORT':'3306',  (埠)

      在settings.py的 INSTALL_APP中新增逆自己定義的app
      
      執行manage.py的shell命令 ctrl+alt+r
      輸入:makemigrations bloguser [appname]  生成建立資料庫的指令碼
      它會在bloguser的app下建立一個 migrations\0001_initial.py

      輸入:sqlmigrate bloguser 0001[migrationname] 列印SQL語句
      為了顯示建立MySQL,pyblog_db資料庫裡表的語句


      輸入migrate bloguser 0001   執行建立資料庫表的指令碼
      在bloguser資料庫中按照以上0001_initial.py中的語句新增表

  tempates (模板)
      建立bloguser目錄
      在bloguser目錄下建立add.html和show.html兩個檔案
      add.html中的內容:
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
      <form action="register" method="post">
          {% csrf_token %} # 指紋驗證 必須有
          使用者名稱:<input type="text" name="username"><br />
          密碼:<input type=password" name="pwd"><br/>
          <input type="submit" value="註冊">
      </form>
      </body>
      </html>
   
      show.html中的內容
      <!DOCTYPE html>
      <html lang="en">
      <head>
           <meta charset="UTF-8">
           <title>Title</title>
      </head>
      <body>
      恭喜逆註冊成功!
      {{ blogUser.username }}---{{ blogUser.pwd }}
      </body>
      </html>

      檢視settings.py檔案下的TEMPLATES中是否有,
      'DIRS':[os.path.join(BASE_DIR,'templates')]這句程式碼。
      它的作用是把bloguser目錄下的檔案關聯在一起

在bloguser下
  views.py
    from django.shortcuts import render (匯入一個渲染器模組)
    from .models import *
    #Create your views here. (建立你的觀點)
    def register(request):
       # GET 要來註冊  add.html
       if request.method == 'GET':
          return render(request,'bloguser/add.html',{})
       # POST 註冊  show.html
       else:
          blogUser = BlogUser()
          blogUser.username = request.POST.get('username')
          blogUser.pwd = request.POST.get('pwd')
          blogUser.save()
          return render(request,'bloguser/show.html',{'blogUser':blogUser})
          重定向的設定要改變POST的返回值,
          return redirect(reverse('user:show',args=[blogUser.id]))


在bloguser檔案下建立urls.py檔案,用它和pyblogsys檔案下的urls.py關聯
在pyblogsys下的urls.py中的內容:
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/',include('bloguser.urls',namespace='user')),
]

在bloguser下的urls.py中的內容:
from django.urls import  path
from .views import *
app_name='user' #和重定向有關
urlpatterns = [
    path('register',register),
    path('show/<int:id>',show,name='show'),#重定向的設定 連線views.py裡的show函式
]

轉發和重定向:
    轉發:一次請求和響應,請求的地址沒有變化,如果此時重新整理頁面就會重做現象
    重定向:一次以上的請求和響應,請求地址發生一次以上的變化,如果此時重新整理頁面不會發生重做現象

    重定向:要在views.py裡匯入redirect(重定向模組) 再匯入reverse模組(解決跳轉路徑)
    重定向的意思是重新匯入另一個地址,在views.py檔案裡新定義一個個行為
    def show(request,id): (它與bloguser裡的urls.py連線)
       blogUser = BlogUser.objects.get(pk=id)

       return render(request,'bloguser/show.html',{'blogUser':blogUser})