>>管理員權限打開cmd,經過cmd命令進入項目目錄 >>django-admin startproject my_Dproject (建立項目) >>cd my_Dproject (進入項目文件夾) >>python3 manage.py startapp app01 (建立app) >>pycharm打開Django\my_Dproject\my_Dproject\下的settings.py文件,在裏面的'INSTALLED_APPS'列表後面添加"app01.apps.App01Config" "或者直接添加簡寫"app01" (註冊項目app:app01) >>在settings.py文件內:"TEMPLATES"列表裏面第二行'DIRS': [os.path.join(BASE_DIR,'templates')] (添加templates文件夾路徑) >>在settings.py文件內最下面:STATIC_URL = '/static/'下面添加:STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] (添加靜態文件夾路徑)
在寫註冊頁面功能時候須要在靜態文件夾內static添加bootstrap文件,以便於咱們可以輕鬆地對html作一些漂亮的佈局。
html文件添加導入jQuery的js文件、 Bootstrap的css和js文件:css
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
my_Dproject/my_Dproject/urls.py 在url路由文件中添加註冊功能路徑html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>註冊界面</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="row"> <h2 class="text-center">註冊頁面</h2> <div class="col-sm-6 col-sm-offset-3 col-md-6 col-md-offset-3 col-xs-6 col-xs-offset-3"> <form action="/register/" method="post"> <p>用戶名:<input type="text" class="form-control" placeholder="請輸入用戶名" name="username" id="i1"></p> <p>密碼:<input type="text" class="form-control" placeholder="請輸入密碼" name="password" id="i2"></p> <input type="submit" class="btn btn-block btn-info" value="註冊提交"> </form> </div> </div> </div> </body> </html>
開啓my_Dproject項目,在瀏覽器輸入url:http://127.0.0.1:8000/register/
python
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'my_Dproject', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '123', } }
my_Dproject/my_Dproject/__Init__.py中添加下面信息: import pymysql pymysql.install_as_MySQLdb() (這裏須要注意:__init__.py文件還在app01文件中有,也能夠在app01中的init文件中添加,效果同樣。)
class User(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) password = models.CharField(max_length=16)
映射表的類建立完畢後,須要進行關鍵的2步【數據庫遷移命令】操做,才能建立出user表:mysql
第一步:將數據庫變更記錄記錄到一個文件中:
在pycharm自帶的Terminal命令行中輸入:
python3 manage.py makemigrations
第二步:將數據庫變更同步到數據庫中:
python3 manage.py migrate
重點:之後只要涉及到數據庫的一絲變更(這裏主要說的是表結構),要想讓變更生效必定要執行這2步數據庫遷移(同步)命令!!!
jquery
--------------------------------------------------------------------------------------------------------------------------------------------------
這裏提一個小點:咱們在測試時候若是遇到下面這種狀況:sql
解決辦法是:在settings.py文件中註釋掉一行代碼:數據庫
--------------------------------------------------------------------------------------------------------------------------------------------------django
新增數據 # 操做數據庫user表新增記錄 # 方式1: user_obj = models.User.objects.create(name=username,password=password) # 方式2: user_obj = models.User(name=username,password=password) user_obj.save() # 對象調用save方法保存到數據庫
查: bootstrap
user_list = models.User.objects.all() # 獲取user表全部的數據(QuerySet對象) # 只要是QuerySet就能夠點query查看獲取到當前QuerySet對象的內部sql語句 user_obj = models.User.objects.all().first() #從上面全部數據的QuerySet對象中取出第一個用戶對象 user_list = models.User.objects.filter(password=555) # filter過濾,查找條件password=555的全部用戶數據,返回結果user_list爲QuerySet對象(裝有查詢到的所有用戶數據對象的一個容器) user_obj = models.User.objects.filter(password=555).first() # 取出剛纔容器中的第一個用戶數據對象。
Tips:除了用filter定位表記錄的方法,還可使用.get()方法:瀏覽器
user_obj = models.User.objects.get(password='555') 這樣查會報錯:get() returned more than one User -- it returned 2! 緣由:用get方法是直接獲取單數據對象自己,報錯的緣由在於根據password='555'查詢的數據是2個結果,那麼就不是單個數據對象,因此就報錯了! 強調:用get方法查詢條件不存在的時候會直接報錯。 因此:不推薦使用get,推薦使用filter查詢,就算條件不存在,會返回一個空的QuerySet對象(<QuerySet []> <class 'django.db.models.query.QuerySet'>)
--------------------------------------------------------------------------------------------------------------------------------------------------
這裏引入一個小點:將查詢到的的全部表記錄傳給html文件,進行頁面渲染以後展示給用戶
templates文件夾內建立user_list.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">用戶數據表</h1> <div class="col-md-8 col-md-offset-2"> <table class="table-hover table-bordered table-striped table"> <thead> <tr> <th>ID</th> <th>name</th> <th>password</th> </tr> </thead> <tbody> {% for user_obj in user_list %} <tr> <td>{{ user_obj.pk }}</td> <td>{{ user_obj.name }}</td> <td>{{ user_obj.password }}</td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </body> </html>
建立一個展現用戶數據的url路徑:
my_Dproject/my_Dproject/urls.py中添加:
url(r'^user_list/', views.user_list)
建立路徑函數:
my_Dproject/app01/views.py中加函數:
def user_list(request): user_list = models.User.objects.all() return render(request, 'user_list.html', {"user_list": user_list}) 後面的字典還能夠替換成locals(),表明函數內全部變量我當作參數傳進前面的html文件中,進行動態頁面渲染: return render(request, 'user_list.html', locals())
開啓my_Dproject項目,在瀏覽器輸入url:http://127.0.0.1:8000/user_list/
這就是剛纔咱們經過增的操做,建立的user表和表中的2條記錄。
--------------------------------------------------------------------------------------------------------------------------------------------------
改:
首先須要明白一點:改是創建在已經查到的數據基礎上修改對應字段值的,因此改的前提必須有一個查的過程:
鎖定單個表記錄,用filter:
user_obj = models.User.objects.filter(id=edit_id).first() # 再次強調若是不加.first(),返回的結果是一個QuerySet對象,而不是用戶數據對象 改: 方式一: models.User.objects.filter(id=edit_id).upadte(name='banana', password='666') 注意:方式一update修改的數據可能不是一條記錄,有可能把查詢到的多條記錄的name和password的值所有改爲banana和666,相似於批量操做。 固然若是能肯定filter對象的惟一性好比條件爲primary_key的id那麼查找的數據確定是一條記錄,這樣也可看做單個記錄修改。 方式二: user_obj = models.User.objects.filter(id=edit_id).first() user_obj.name = 'banana' user_obj.name = '666' user_obj.save()
編輯對象獲取方式:
咱們在表記錄修改的時候通常都是須要獲取到該條表記錄的主鍵id值,這樣就能精肯定位修改該條記錄了。因此須要一些手段來傳遞id值:
編輯對象的id的獲取方式 方式1:利用input隱藏一個標籤 <input type="hidden" name="edit_id" value="{{ user_obj.pk }}"> 方式2: form表單中加入GET請求數據,在views函數方法中經過request.GET.get(edit_id)來獲取須要修改的id (雖然請求方式是POST,但能夠在標籤內加入GET請求參數,在views函數中可以同時經過request.POST和request.GET方法拿到不一樣的數據) <form action="/edit/?edit_id={{ user_obj.pk }}" method="post">
刪:
刪除和修改方法相似:
方法一: models.User.objects.filter(password='555').delete() # 會將queryset全部的數據對象所有刪除 方法二: user_obj = models.User.objects.filter(password='555').first() user_obj.delete()
最後補充一張Web框架實現的最基礎的流程圖:(後期不斷完善中...)