這絕對不是只是Django入門

網上對Django教程都處在一個入門篇,對于想深入Django卻不知道如何入手。本人是一名iOS開發(fā)者裙顽,在工作閑暇時間接觸了python這么語言。在最近剛剛發(fā)布的語言排行榜中python已經躋身第一名宣谈。這得力于pyhton有非常多優(yōu)秀的第三方庫及今年特別火的人工智能(深度學習)愈犹。今天我想為大家分享的是Django這個Web服務器框架。了解Django會更好的了解服務器的工作闻丑,同時也鞏固我對python的知識面漩怎。Django的大門準備打開,are you ready 0鸬А扬卷?

django.jpg

項目是基于Mac系統(tǒng) python 2.7版本牙言。python工具是系統(tǒng)自帶酸钦。如果是windows請自行百度安裝python。首先第一步安裝Django咱枉。我這邊用的是pip工具卑硫。

 sudo pip install django

我們開始搭建web框架

1.創(chuàng)建項目
# 指定路徑,創(chuàng)建一個名為Django_api的項目
cd Desktop
django-admin.py startproject Django_api
2.創(chuàng)建app(這里的app是指項目中的每個功能蚕断。如用戶登陸注冊可以放在同一個app中)
#進入項目路徑欢伏,創(chuàng)建一個叫用戶的app
cd django_api
django-admin startapp users
django目錄.png
3.查看是否部署成功
python manage.py runserver 0.0.0.0:8000

#July 26, 2017 - 01:49:25
#Django version 1.11.2, using settings 'django_api.settings'
#Starting development server at http://0.0.0.0:8000/
#Quit the server with CONTROL-C.
#提示此消息代表部署成功

現(xiàn)在我來講解一下目錄中的文件有何作用

django_api
|-- _init_.py
|-- settings.py
|-- urls.py
|-- wsgi.py
|--users
||-- _init_.py
||-- admin.py
||-- apps.py
||-- models.py
||-- tests.py
||-- view.py
|-- db.sqlite3
|-- manage.py

我們先講解django文件目錄下面的幾個文件

|-- init.py: 代表的是這是一個python文件
|-- settings.py : 服務器全局設置文件
|-- urls.py : url跳轉控制器(根據(jù)url跳轉對應的app中的view)
|-- wsgi.py : wsgi用于配置部署至云服務器的
|-- db.sqlite3: 系統(tǒng)默認用sqlite3數(shù)據(jù)庫(如果用mySQL或其他數(shù)據(jù)庫可忽略)
|-- manage.py: 用于啟動服務器,更新數(shù)據(jù)庫等操作庫

users文件夾中

||-- init.py:代表的是這是一個python文件
||-- admin.py:配置admin后臺管理系統(tǒng)的顯示方式及功能
||-- apps.py :配置users這個app的基本參數(shù)
||-- models.py:存放用戶模型
||-- tests.py:測試框架編寫
||-- view.py : 具體實現(xiàn)邏輯


講解了項目的創(chuàng)建及文件的作用亿乳,現(xiàn)在開始進行項目編寫

首先了解一下setting文件的配置硝拧,我主要講解一些重要的地方径筏。如有些未提及,可自行搜索障陶。

ALLOWED_HOSTS = [u'0.0.0.0',u'127.0.0.1']

ALLOWED_HOSTS設置的是允許用戶通過那個url訪問此服務器滋恬,如果未配置則訪問不到該服務器,用于我們現(xiàn)在處于測試狀態(tài)抱究,我們可以寫我們的本地地址以便于測試

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users'
]

在此配置中添加了最后一行'users'恢氯,代表此app允許在此服務器上面運行,如果未配置卻執(zhí)行該app則會報錯

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "testDjango",
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'localhost',
    }
}

數(shù)據(jù)庫我改為mysql數(shù)據(jù)庫鼓寺。注意key為大寫且固定字段不可隨意編寫勋拟。請確保數(shù)據(jù)庫配置正確。否則會編譯不通過妈候。
NAME: 數(shù)據(jù)庫名稱
USER: 數(shù)據(jù)庫用戶名
PASSWORD:數(shù)據(jù)庫密碼
HOST:數(shù)據(jù)庫域名

TEMPLATES = [
    {  'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,"templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

templates配置此路徑后敢靡,在對應路徑創(chuàng)建文件夾,可把HTML文件放入此路徑中苦银。服務器才能識別(故 html文件應該存放在templates文件下)

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]

應在對應位置創(chuàng)建static文件夾醋安,用于存放的是css等靜態(tài)文件。


基本配置完成后我們開始編寫第一個請求

打開urls文件編寫相應代碼(LoginView則在后面具體講解如何編寫)
# urls.py
from users.views import LoginView
urlpatterns = [
    url(r'^login/',LoginView.as_view()),
]

當用戶發(fā)起http請求是訪問到該路徑如 http://0.0.0.0:8000/login?username=1&password=1
時墓毒。代表的是訪問該域名下的login路徑吓揪,通過urlpatternp配置會跳轉到LoginView.as_view()。傳遞的參數(shù)為username=1所计,password=1參數(shù)柠辞。

打開users中的views.py 實現(xiàn)具體的邏輯處理
class LoginView(View):
    def get(self,request):
        return HttpResponse("這是get請求")

    def post(self,request):
         return HttpResponse("這是post請求")

這是一個很簡單是處理請求。用戶訪問到該url時主胧,返回的是一個字符串表明是什么請求叭首。在下面我會告訴你如果去實現(xiàn)登陸,驗證請求參數(shù)等


實現(xiàn)登陸最重要的是通過用戶表踪栋。對用戶表進行增刪改查功能”焊瘢現(xiàn)在開始來講解一下。

1.打開users下的models.py文件

# models.py
from __future__ import unicode_literals
from datetime import datetime
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    nikeName = models.CharField(max_length=100,null=False,default="",verbose_name=u"昵稱");
    birthday = models.DateField(verbose_name=u"生日",null=True,default=datetime.now);
    image    = models.ImageField(upload_to="image/%Y/%m",default="image/default.png")

    class Meta:
        verbose_name = "用戶信息"
        verbose_name_plural = verbose_name;

    def __unicode__(self):
        return self.username;

這個模型與普通創(chuàng)建的模型不一樣夷都,它是基于AbstractUser創(chuàng)建的模型眷唉,是重載了系統(tǒng)用戶模型《诠伲可通過系統(tǒng)的方法來實現(xiàn)登陸等操作冬阳。這模型中添加了別名,生日党饮,圖片等字段肝陪。verbose_name代表的是添加一個別名用于在admin中顯示的字段。重寫class Meta:的道理也是一樣刑顺。

2.修改settings文件

# settings.py
# 重裝自定義User表為系統(tǒng)用戶表
AUTH_USER_MODEL = 'users.User'

3.更新到數(shù)據(jù)庫

django中有兩個默認的方法氯窍,打開終端饲常,cd 到目錄下執(zhí)行

python manage.py makemigrations
python manage.py migrate

第一個是告訴數(shù)據(jù)庫有什么表添加。第二個是創(chuàng)建表狼讨。

4.添加數(shù)據(jù)

user = User.objects.Create_user(username='123',password='123')

創(chuàng)建系統(tǒng)用戶模型序調用User.objects.Create_user() 而不是 User.objects.Create()需要注意不皆。

5.添加校驗form

創(chuàng)建一個user_form.py文件

# user_form.py
from django import forms
class LoginFrom(forms.Form):
    username = forms.CharField(required=True)
    password = forms.CharField(required=True,min_length=5)

6.view的實現(xiàn)

from django.views.generic.base import View
from django.http import request,HttpResponse
from django.contrib.auth import authenticate,login
from .models import User
from user_forms import LoginFrom

class LoginView(View):
    def get(self,request):
        form = LoginFrom(request.GET);

        #判斷校驗有沒有正確
        if not form.is_valid():
            return HttpResponse(form.errors)

        #判斷數(shù)據(jù)庫有沒有該有用戶
        user = authenticate(username=user_name, password=pass_word);

        #如果有用戶登陸
        if user is not None:
            login(request, user)
            return HttpResponse("登陸成功");

        return HttpResponse("登陸失敗")

    def post(self,request):
        return HttpResponse("post請求暫未處理")

django出現(xiàn)的html網頁的處理,admin管理系統(tǒng)的處理熊楼,還有其他功能霹娄,將在下一章為你們展現(xiàn)。希望本章讓大家對django有個了解鲫骗。完成一次http請求后的django的執(zhí)行過程犬耻。謝謝大家的閱讀。

下面是對數(shù)據(jù)庫表的操作

1.Person.objects.all()
2.Person.objects.all()[:10] 切片操作执泰,獲取10個人枕磁,不支持負索引,切片可以節(jié)約內存
3.Person.objects.get(name=name)  #get是用來獲取一個對象的术吝,如果需要獲取滿足條件的一些人计济,就要用到filter
4.Person.objects.filter(name="abc")  # 等于Person.objects.filter(name__exact="abc") 名稱嚴格等于 "abc" 的人
5.Person.objects.filter(name__iexact="abc")  # 名稱為 abc 但是不區(qū)分大小寫,可以找到 ABC, Abc, aBC排苍,這些都符合條件
6.Person.objects.filter(name__contains="abc")  # 名稱中包含 "abc"的人
7.Person.objects.filter(name__icontains="abc")  #名稱中包含 "abc"沦寂,且abc不區(qū)分大小寫
8.Person.objects.filter(name__regex="^abc")  # 正則表達式查詢
9.Person.objects.filter(name__iregex="^abc")  # 正則表達式不區(qū)分大小寫filter是找出滿足條件的怎静,當然也有排除符合某條件的
10.Person.objects.exclude(name__contains="WZ")  # 排除包含 WZ 的Person對象
11.Person.objects.filter(name__contains="abc").exclude(age=23)  # 找出名稱含有abc, 但是排除年齡是23歲的0
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末秘遏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屉更,更是在濱河造成了極大的恐慌彤守,老刑警劉巖毯侦,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異具垫,居然都是意外死亡侈离,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門筝蚕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卦碾,“玉大人,你說我怎么就攤上這事饰及≌崤鳎” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵燎含,是天一觀的道長。 經常有香客問我腿短,道長屏箍,這世上最難降的妖魔是什么绘梦? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮赴魁,結果婚禮上卸奉,老公的妹妹穿的比我還像新娘。我一直安慰自己颖御,他們只是感情好榄棵,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潘拱,像睡著了一般疹鳄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芦岂,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天瘪弓,我揣著相機與錄音,去河邊找鬼禽最。 笑死腺怯,一個胖子當著我的面吹牛,可吹牛的內容都是我干的川无。 我是一名探鬼主播呛占,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼懦趋!你這毒婦竟也來了栓票?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤愕够,失蹤者是張志新(化名)和其女友劉穎走贪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惑芭,經...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坠狡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遂跟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逃沿。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖幻锁,靈堂內的尸體忽然破棺而出凯亮,到底是詐尸還是另有隱情,我是刑警寧澤哄尔,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布假消,位于F島的核電站,受9級特大地震影響岭接,放射性物質發(fā)生泄漏富拗。R本人自食惡果不足惜臼予,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啃沪。 院中可真熱鬧粘拾,春花似錦、人聲如沸创千。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽追驴。三九已至械哟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氯檐,已是汗流浹背戒良。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冠摄,地道東北人糯崎。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像河泳,于是被迫代替她去往敵國和親沃呢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容