Django入門必知必會操做

1、Django基礎必備三件套

HttpRseponse

內部傳入一個字符串參數,返回給瀏覽器。html

在app目錄下的views.py添加函數,添加函數以前必須在urls.py添加函數對應關係,不然訪問不到python

def login(request):
    # 業務邏輯代碼
    return HttpResponse('welcome to GuangDong')

render

request : 瀏覽器請求相關的信息mysql

除request參數外還接受一個待渲染的html模板文件和一個保存具體數據的字典參數。總共用三個參數sql

render(request, template_name, context=None)數據庫

將數據填充進模板文件,最後把結果返回給瀏覽器。(相似於以前用的jinja2模塊)django

def reg(request):
    # print(request)
    # print(request.__dict__)
    user_dict = {'name':'cxk','sex':'girl'}
    # return render(request,'reg.html')

    # 給模板傳值的方式1:
    # 將user_dict傳遞給reg.html頁面 頁面上經過xxx就可以獲取到該字典
    return render(request,'reg.html',{'user':user_dict})

    # 給模板傳值的方式2:
    # 這種狀況是針對有多個字典的狀況下,
    # locals()將當前名稱空間中全部的變量名傳遞給html頁面,在html頁面用user_dict.name方式取值
    # 可是會有一個問題:影響效率。
    print(locals())
    return render(request,'reg.html',locals())

redirect

接受一個URL參數,表示跳轉到指定的URL。至關於重定向。後端

當我在瀏覽器輸入http://127.0.0.1:8000/home時,他就會自動跳轉到https://www.autohome.com.cn瀏覽器

def home(request):
    # return redirect('/index')
    return redirect('https://www.autohome.com.cn')

def index(request):
    return HttpResponse('index')

2、Django鏈接數據庫

第一步:從settings配置文件中配置app

# django會自帶一個小型的sqlite3數據庫,咱們只需改回咱們用的mysql就好了
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'user_info', # 數據庫名
        'USER':'tomjoy',
        'PASSWORD':'123456',
        'HOST':3306,
        'CHARSET':'utf8'
    }
}

第二步:函數

django默認使用的是mysqldb鏈接數據庫 可是該模塊不支持了
因此須要告訴django不要用mysqldb,得用pymysql鏈接
你能夠在項目名下面的__init__.py也能夠在應用名下面的__init__.py文件中指定

import pymysql
pymysql.install_as_MySQLdb()

3、request對象取值方式

​ 在views.py中寫函數的時候,每一個函數必須接受一個參數叫request,這個request就是瀏覽器發送請求的請求數據,django將他封裝成一個對象。

1.獲取post請求攜帶的數據
request.POST

2.獲取get請求攜帶的數據
request.GET

發現get和post在後端獲取用戶數據的時候 規律是同樣的

print(request.POST)
    print(request.POST.get('username'))
    print(request.POST.get('password')) 
   #  <QueryDict: {'username': ['admin'], 'password': ['123']}>
   #  admin
   #  123

若是是一條數據有多條值,狀況又不同了

print(request.POST)
    print(request.POST.get('username'))
    print(request.POST.get('password'))
    print(request.POST.get('hobby'))
    print(request.POST.getlist('hobby'))
    # <QueryDict: {'username': ['admin'], 'password': ['123'],'hobby': ['sing', 'dance', 'basketball']}>
    # admin
    # 123
    # basketball

若是還用get('hobby'),他默認只取最後一個

要用getlist() 才能將完整的列表取出來

4、Django ORM簡介

ORM即對象關係映射(Object Relational Mapping)
python: mysql:

類 即 數據庫中的表

對象 即 表的記錄

對象.屬性 即 記錄的某個字段對應的值

優勢:
可以讓一個不會數據庫操做的人 也可以簡單快捷去使用數據庫

缺點:
因爲封裝程度過高 可能會致使程序的執行效率偏低,有時候 結合項目需求 可能需 要你手寫sql語句

注意事項
1.django的orm不會自動幫你建立庫,庫須要你本身手動建立
只會自動幫你建立表 你只須要書寫符合django orm語法的代碼便可

1.在app下所在的models.py中書寫類(建立表)

from django.db import models

class User(models.Model):
    
    # 設置id字段爲user表的主鍵  id int primary key auto_increment
    # 在django中 你能夠不指定主鍵字段 django orm會在建立當前表的時候,自動幫你新建一個名爲id的主鍵字段
    id = models.AutoField(primary_key=True)
    
    # 設置username字段 username varchar(64) CharField必需要指定max_length參數
    username=models.CharField(max_length=64)   # 在django orm中 沒有char字段  可是django 暴露給用戶 能夠自定義char字段
    
    # 設置password = password int
    password = models.IntegerField()
    # phone = models.BigIntegerField(default=110)  # 新增的字段 能夠提早設置默認值
    # addr = models.CharField(max_length=64,null=True)  # 新增的字段 能夠設置爲空

2.上面的代碼僅僅是在models.py上面添加了一個類,還沒真正在數據庫中建立表,

須要再執行兩條命令:數據庫遷移(同步)命令:

須要在CMD命令行中而且在該項目下的路徑執行:

  1. python manage.py makemigrations 不會建立表 僅僅是生成一個記錄 將你當前的操做記錄到一個小本本上(migrations文件夾)
  2. python manage.py migrate 將你的orm語句真正的遷移到(同步)到數據庫中

5、Django操做數據庫

字段的增刪改查:

​ 新增的字段:
​ 1.直接提供默認值 default
​ 2.設置該字段能夠爲空 null=True
​ 注意:不要輕易地註釋models.py中任何跟數據相關的代碼
​ 只要是跟數據庫相關的代碼,處理時必定要謹慎謹慎!!!

數據的增刪改查:

​ 1.get()方式:

從數據庫獲取對象(固定寫法) models . 表名 . objects.get(條件)

select * from User where username='cxk'

obj = models.User.objects.get(username='cxk')

拿到obj後便可進行點取值

例:

print(obj.username)
print(obj.password)

注意:get取值方式在 當查詢條件不存在的時候 ,會直接報錯 。 若是存在會直接給你返回 數據對象自己。 因此不推薦使用

​ 2.filter()方式 推薦使用

obj = models.User.objects.filter(username='cxk')

​ --當查詢條件不存在的時候 不會報錯而是返回一個空

​ --當條件存在的狀況下 不管數據有幾條返回的都是列表套對象的數據格式

​ --filter能夠當多個查詢條件 而且是and關係,用逗號隔開每一個條件

​ --你能夠將filter查詢出來的結果當作列表去對待 ,列表裏面放的是一個個對象

​ --支持正數的索引取值和切片但 不支持負數,因此仍是不建議用切片取值

​ --建議使用first()取第一個元素

user_obj = obj[0]
user_obj = obj[0:3]

user_obj = obj[-1]  # 報錯

user_obj = res.first()  取queryset第一個元素

3.數據的增:

​ 1.create() :
​ --括號內參數是以關鍵字參數的形式,去建立數據
​ --該方法由一個返回值,返回值就是當前對象自己

# 直接將用戶名和密碼寫入數據庫
# insert into User(username,password) values('cxk','123')
user_obj = models.User.objects.create(username='cxk',password='123')

​ 2.利用對象點方法的方式:

user_obj = User(username='cxk',,password='123')
user_obj.save()  # 將當前對象保存到數據庫中

4.數據的增:

方式一:update()

方式二:

5.數據的刪除:

delete()

相關文章
相關標籤/搜索