目錄css
利用Django 框架搭建一個簡易版本的登陸註冊,修改用戶信息的項目html
在此以前,須要瞭解如下知識點:前端
默認狀況下全部的 html 文件都是放在 templates 文件夾內的。python
靜態文件就是 網站所使用到的全部提早寫好的css、js、第三方的前端模塊、圖片文件、都叫作靜態文件資源。mysql
默認狀況下網站所用到的靜態文件資源所有都會放到static文件夾下,jquery
Django中須要手動建立這個文件夾,static 文件夾下面還能夠建立其餘的文件夾,將css、js文件區分開來。sql
css 文件夾 js 文件夾 font 文件夾 img 文件夾 Bootstrap
在 mysite settings.py配置文件中添加如下信息:shell
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' # 訪問靜態文件的接口url路徑後綴, STATICFILES_DIRS = [ # 靜態文件資源存在的具體文件夾目錄 os.path.join(BASE_DIR,"static"), # 將static文件裏的內容暴露給用戶看 os.path.join(BASE_DIR,"static1"), # 能夠寫多個 ] # 這樣客戶端經過url方式能夠訪問你配置的靜態文件資源。
咱們在配置好這個靜態文件配置後,須要在html文件中動態使用靜態文件的url路徑,能夠在html中動態綁定,以避免後續靜態文件路徑變更很差擴展。數據庫
咱們以前學過了Bootstrap框架,能夠直接引用過來。django
將bootstrap文件夾放入static文件夾中,html head標籤內引用如下內容。
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> {% load static %} <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
如今咱們在訪問咱們的html頁面,會看到請求靜態文件的url路徑會變成咱們想要的:,此時咱們看到這個請求後綴是static,若是咱們沒有再urls.py中配置這個對應關係,咱們是沒辦法訪問到的,這個爲何訪問的到呢?這是由於讓django幫咱們作了這個操做,你就不用操心了哈~。
Request URL: http://127.0.0.1:8000/static/bootstrap/css/bootstrap.min.css
注意:
若是你的Django項目中 DEBUG
模式設置爲False,那麼靜態文件會報404,修改成True便可正常訪問(200)
form表單默認是get請求。
那麼咱們也能夠指定他的請求方式是post
或者get請求也能夠攜帶一些參數一塊兒發送到後端:
格式:路徑後綴/?xxx=xxx&yyy=xxx
http://127.0.0.1:8000/login/?user=qinyj&pwd=123
那麼問題就來了,get請求攜帶參數咱們均可以看到,它的參數都是在瀏覽器url上直接看獲得的,那麼咱們總結如下:
不寫,默認朝當前地址提交
只寫後綴的形式:index/
寫全路徑的形式:https://www.baidu.com
前期若是咱們在朝後端提交post請求的時候,會出現403的狀況,須要註釋掉配置文件中一行內容。
'django.middleware.csrf.CsrfViewMiddleware'
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
在django中後端的視圖函數,不管是發的get請求仍是post請求,都會執行視圖函數,默認處理的是get請求。
咱們在視圖函數中定義的全部函數都必須有返回值,而且返回值都是HTTPResponse對象
如何在python後端判斷當前的請求方式是什麼?
這裏須要瞭解request 的一些方法
request.method:獲取請求方式,返回的是純大寫的字符串。
request.GET:獲取用戶提交的get請求數據,返回的是列表套對象。
request.GET.get():獲取列表中的最後一個
request.GET.getlist():獲取列表類型的數據
request.POST:獲取用戶提交的post請求數據
request.POST.get():獲取列表中的最後一個
request.POST.getlist():獲取列表類型的數據
須要在settings.py配置文件中配置
DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'day50', 'USER':'root', 'PASSWORD':'123', 'HOST':'192.168.32.130', 'PORT':3306, } }
在項目名/應用名下的一個__init__.py
中寫
import pymysql pymysql.install_as_MySQLdb()
ORM 對象關係映射
python中 數據庫 類名 --> 表名 對象 --> 數據 對象.屬性 --> 字段對應的值
爲何使用ORM
可以讓不會數據庫操做的人也可以簡單方便的去操做數據庫
ORM的缺點
封裝程度過高,有時候會出現查詢效率偏低的問題。
咱們在寫django項目的時候,最好一個django項目就對應一個數據庫。
from django.db import models # Create your models here. # 必須是models.Model的子類 class User(models.Model): # 若是不寫主鍵,默認會添加一個名爲id的主鍵,而且這個主鍵是自增id name = models.CharField(max_length=32) pwd = models.IntegerField()
編寫完models.py以後,咱們要把表建立在MySQL數據庫中,須要用到兩條命令
python3 manage.py makemigrations
記錄將數據的修改
python3 manage.py migrate
真正同步到數據庫中
只要修改了models.py中與數據庫相關的代碼,就必須從新執行上面兩條命令。
對數據庫中字段的修改,直接修改字段便可
若是是新增數據庫字段,要注意兩點:
要給新的字段設置一個默認值
email = models.EmailField(default="qinyj@qq.com")
或者設置新的字段爲空
phone = models.BigIntergerField(null=True)
若是要刪除數據字段,直接註釋對應的字段便可,注意刪除字段也會把數據刪除
最後的最後,記得要執行數據庫的兩條遷移命令
1.python3 manage.py makemigrations # 將數據庫的修改 記錄到小本本上(migrations文件內) 2.python3 manage.py migrate # 將修改操做真正的同步到數據庫中
增: models.User.objects.create user_obj = models.User.objects.create(username=username,password=password) print(user_obj,user_obj.username,user_obj.password) # create方法會有一個返回值 返回值就是當前被建立的對象自己 刪: models.User.objects.filter(id=delete_id).delete() """ 批量操做 會將filter查詢出來的列表中全部的對象所有刪除 """ 改: models.User.objects.filter(id=edit_id).update(username=username,password=password) """ 批量操做 會將filter查詢出來的列表中全部的對象所有更新 """ 查: data = models.User.objects.filter(username=username) # <QuerySet [<User: User object>]> """ filter返回的結果是一個"列表",裏面纔是真正數據對象 filer括號內能夠放多個關鍵字參數 這多個關鍵字參數在查詢的時候 是and關係 """ user_list = models.User.objects.all() # models.User.objects.filter() """ 結果是一個"列表" 裏面是一個個的數據對象 """