Django 2 零基础 - 待办清单网站
根據b站視頻https://www.bilibili.com/video/BV1bW411N7xN?p=8整理的
不清楚可以去看視頻喲
1前期準備
成功顯示如下
2準備app
- 激活虛擬環境
- 一個app負責一種功能 創建一個 todolist App 負責實現 待辦事項 功能
將to_do_list整個拖到文本編輯器
- 注冊該app,告訴服務器我存在
- 在這個app里面做個html網頁,放在templates(網頁模板)文件夾中
!tab
h1 tab 會自動生成
右鍵 open in browser 選default 選擇其他可能會出現找不到文件chrome
3配置url和view
- 設置好網址, 給這個頁面起個什么網址
- 當用戶通過這個網址發出請求時,將網頁發送給他
- 因為這個網頁是待辦事項網頁, 網址設置和用戶請求都讓 todolist APP處理
這里django可能下滑波浪線 可以在settings把環境選在scripts下 因為剛開始裝的時候是吧django裝在scripts下
4.bootstrap導航欄
https://v4.bootcss.com/docs/4.0/examples/ 找到Navbar static 復制源代碼
替換cdn
5.bootstrap表格
https://v4.bootcss.com/docs/4.0/content/tables/
6.bootstrap表單
https://v4.bootcss.com/docs/components/forms/
7.網址名,網頁名
關于include()
大項目 -> 要避免網址名 網頁名沖突
render() 如何找到網頁 ?
根據所提供的網頁名稱,找所有的templates的文件夾,取第一個匹配的
網頁名字重復怎么辦?
給個前綴
建個新文件夾在templates下,以 app的名字 命名
想改網址怎么辦?要改的地方好多o(╥﹏╥)o
給網址起名字
網址名跟其他app里面的網址名字重復怎么辦?
給個前綴
8 模版繼承
我想改變導航欄的樣式怎么辦? 3個網頁都要改?
Template inheritance
做個模板html(所有網頁的風格主題), 其他網頁繼承它,拓展它, 類似python的類繼承
extends
到main之前的 和之后的粘貼下來 做成base.html
9.靜態文件
新建static文件夾,存放 圖片 css javascript
里面,再新建一個app文件夾,避免與其他app的static文件夾里面的靜態文件沖突
10.處理用戶請求
request GET HTML form -> action="" method="POST" button->submit {% csrf_token %} 跨站請求偽造 name="" 給input的起名字 request.POST是什么? QueryDict content dictionary 在html中通過var訪問字典 {{ var }} 變量{{ }} 和標簽{% %} post是發送請求 action='' 表發送到自己的服務器11.增刪改查
刷新后會出現如圖錯誤 因為我們定義的是post 而刷新方法是get
所以 要承擔用戶的post和get請求
增刪改查 用字典存儲, 只要服務器開著…
如果是get請求怎么辦? 比如刷新 判斷request.method 如果是get 只要將原來頁面返回給他即可
如果是get請求怎么辦? request.POST 中不存在’待辦事項’這個鍵
如果是post請求, 但用戶不寫內容怎么辦? request.POST 中的’待辦事項’這個鍵對應值為 空的字符串 ‘’
用GET方法刪除,劃掉真的對嗎? 用隱藏的form
全局列表
重點在于 查找路徑todo/ del/<forloop_counter> 當你刪除序號的待辦事項 是todo/ del/2
12.bootstrap彈窗
https://v4.bootcss.com/docs/4.0/components/alerts/
<div class="alert alert-warning alert-dismissible fade show" role="alert"><strong>Holy guacamole!</strong> You should check in on some of those fields below.<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> </div>js
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>Modal https://v4.bootcss.com/docs/4.0/components/modal/
13.數據庫
數據庫,建標
CREATE TABLE 待辦事項表 (序號 INT NOT NULL AUTO_INCREMENT,待辦事項 VARCHAR(100) NOT NULL,已完成 tinyint(1) NOT NULL DEFAULT 0,PRIMARY KEY (序號) )ENGINE=InnoDB CHARSET=utf8; 增加數據 INSERT INTO 待辦事項表 (待辦事項) VALUES ('看電影'); INSERT INTO 待辦事項表 (待辦事項) VALUES ('逛街'); INSERT INTO 待辦事項表 (待辦事項) VALUES ('陪客戶吃飯'); 建表 和 增刪改查 django都能幫我們搞定 設置數據庫連接 DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),} }create Model
創建Model類,用來描述表的構成: 有哪些列(待辦事項,完成狀態,序號…)
這是給網站開發者看的
—————————————————————————————————————————————
登錄注冊
思路
1auth.urls
from django.contrib import admin from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('', include('myauth.urls')), ]2 myauth.urls
from django.urls import path,include from . import views app_name='myauth' urlpatterns = [path('',views.主頁,name='主頁'),path('login/',views.登錄,name='登錄'), ]3 views.py
def 主頁(請求):return render(請求,'myauth/home.html')4 html
創建超級管理員
python manage.py createsuperuser
python manage.py runserver 開啟服務器
在model中建表 建注冊的新要求
from django.db import models from django.contrib.auth.models import User# Create your models here.class 普通會員表(models.Model):用戶=models.OneToOneField(User,on_delete=models.CASCADE)昵稱=models.CharField(blank=True,max_length=50)生日=models.DateField(blank=True,null=True)#生日可以為空 修改model后要重新建立遷移文件class Meta:verbose_name_plural="普通會員表s"之后在cmd輸入以下兩句 真正的建表
python manage.py makemigrations python manage.py migrate在admin.py
from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.models import User from .models import 普通會員表class 普通會員表Inline(admin.TabularInline):#兩張表一起顯示 表格顯示法 一對一model= 普通會員表can_delete = Falseverbose_name_plural = '普通會員表'class UserAdmin(BaseUserAdmin):inlines = (普通會員表Inline,)admin.site.unregister(User) admin.site.register(User,UserAdmin) #重新注冊 前者注冊model這個表 后者注冊配置文件新建forms.py
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django import forms #創建一個表單給用戶填寫 之前的UserCreationForm是django幫我們寫的 所以現在新建的繼承UserCreationFormclass 自定義注冊表單(UserCreationForm):昵稱 = forms.CharField(required=False, max_length=50)#required=False昵稱不一定寫生日 = forms.DateField(required=False)class Meta:model=User #自定義注冊表屬于普通會員表 而其又屬于User(UserCreationFor創建產生的fields=('username','password1','password2','email','昵稱','生日')#指定非超級用戶(管理員)什么地方可以編輯什么地方不可以之后再views.py 導入
from .forms import 自定義注冊表單將UserCreationForm替換成自定義注冊表單
若不滿意django自帶的錯誤提示 可以用if else 自己寫
或者自定義錯誤 但是一般比較麻煩的是不知道對應的鍵值 所以輸入as.json
這樣就知道鍵值是 invalid
可以在def 中修改invalid的值
建立個人中心
現有網址再有網頁再有函數
urls.py
views.py
from django.contrib.auth.decorators import login_required@login_required(login_url="myauth:登錄") #一定要登錄 沒登錄的話跳到登錄頁面 def 個人中心(請求):return render(請求,'myauth/user_center.html')@login_required(login_url="myauth:登錄") def 編輯個人信息(請求):if 請求.method == 'POST':#編輯成功到中心return redirect(請求,'myauth/user_center.html')else:#get 是想編輯return render(請求, 'myauth/edit_profile.html')@login_required(login_url="myauth:登錄") def 修改密碼(請求):if 請求.method == 'POST': # 編輯成功到中心return redirect(請求, 'myauth/user_center.html')else: # get 是想編輯return render(請求, 'myauth/change_password.html')待更新…
總結
以上是生活随笔為你收集整理的Django 2 零基础 - 待办清单网站的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 210511阶段四 切片 迭代 生成器
- 下一篇: 2019蓝桥杯省赛b组