Django開發(fā)-1

環(huán)境安裝和配置

pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install virtualenvwrapper-win
mkvirtualenv web  #創(chuàng)建虛擬環(huán)境
workon web  #切換到虛擬機(jī)環(huán)境
pip install django==2.2.7

#settings.py
ALLOWED_HOSTS = ['*']
LANGUAGE_CODE = 'zh-hans'
#TIME_ZONE = 'UTC'
USE_TZ = False

應(yīng)用環(huán)境配置

創(chuàng)建應(yīng)用

>cd <項(xiàng)目目錄>
>python manage.py startapp blog

  • migrations

    遷移文件集合

  • admin.py:項(xiàng)目的后臺(tái)

  • apps.py:應(yīng)用設(shè)置

  • models.py:模型(數(shù)據(jù)庫(kù))

  • views.py:視圖(頁(yè)面請(qǐng)求和響應(yīng))

注冊(cè)應(yīng)用

  • 修改settings.py
INSTALLED_APPS = [
   ...
    'blog.apps.BlogConfig'
]

數(shù)據(jù)庫(kù)配置

  • 啟動(dòng)mysql服務(wù)

  • [shuyun@master ~]$ sudo service mysqld start
    Starting mysqld:                                           [  OK  ]
    
    
    • 數(shù)據(jù)庫(kù)連接參數(shù):
      • 用戶: root
      • 密碼:123456
      • 端口:3306
  • 確認(rèn)虛擬機(jī)IP

[shuyun@master ~]$ ifconfig
eth5      Link encap:Ethernet  HWaddr 00:50:56:3A:1F:12  
          inet addr:192.168.89.200  Bcast:192.168.89.255  Mask:255.255.255.0

  • settings.py完成mysql配置

    • 開發(fā)環(huán)境

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.sqlite3',
              'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
          }
      }
      
      
    • 生產(chǎn)環(huán)境

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'blog',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'192.168.89.200',
        'PORT':3306,
    }
}

安裝pymysql

pip install PyMySQL 

修改blogproj/init.py

import pymysql 
pymysql.install_as_MySQLdb()

創(chuàng)建數(shù)據(jù)庫(kù)和授權(quán)

[root@master ~]# mysql -uroot -p123456
mysql> create database blog;
mysql> grant all on blog.* to root@'%' identified by '123456';

創(chuàng)建管理員賬號(hào)

用戶:admin党涕,密碼:admin

python manage.py createsuperuser

數(shù)據(jù)模型

在models.py中完成如下配置

博客模型

from django.db import models
from django.contrib.auth.models import User

#文章類別
class Category(models.Model):
    #默認(rèn)自動(dòng)生成id字段作為主鍵
    name = models.CharField(verbose_name='名稱', max_length=100)

#標(biāo)簽
class Tag(models.Model):
    #默認(rèn)自動(dòng)生成id字段作為主鍵
    name = models.CharField(verbose_name='名稱', max_length=100)

class Post(models.Model):
    title = models.CharField(verbose_name='標(biāo)題', max_length=100)
    body = models.TextField(verbose_name='正文') #TextField存儲(chǔ)大段文本
    create_time = models.DateTimeField(verbose_name='創(chuàng)建時(shí)間')
    modified_time = models.DateTimeField(verbose_name='修改時(shí)間')
    excerpt = models.CharField(verbose_name='摘要',max_length=255)
    category = models.ForeignKey(Category, on_delete=models.CASCADE,verbose_name='類別') #一對(duì)多
    tags = models.ManyToManyField(Tag, blank=True,verbose_name='標(biāo)簽') #多對(duì)多
    author = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用戶')

數(shù)據(jù)庫(kù)遷移

python manage.py makemigrations #創(chuàng)建遷移文件
python manage.py migrate #遷移到數(shù)據(jù)庫(kù)

ORM操作

存數(shù)據(jù)

>python manage.py shell
In [1]: from blog.models import Category,Tag,Post
#寫入類別
In [2]: cate = Category(name='test cate1')
In [3]: cate.save()
#寫入標(biāo)簽
In [4]: tag = Tag(name='test tag1')
In [5]: tag.save()
#寫入博客
In [2]: from django.contrib.auth.models import User
In [8]: from django.utils import timezone
In [4]: user = User.objects.get(username='admin')
In [7]: post = Post(title='title_test1',body='body_test1',create_time=timezone.now(),modified_time=timezone.now(),category=cate,author=user)
post.save()

讀數(shù)據(jù)

#讀取category
In [18]: cateall = Category.objects.all()
In [19]: cateall
Out[19]: <QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>
In [20]: cateall[0]
Out[20]: <Category: Category object (1)>
In [21]: cateall[0].name
Out[21]: 'test cate1'
#TODO練習(xí):讀取post的body數(shù)據(jù)
In [22]: post = Post.objects.all()
In [23]: post[0].body
Out[23]: 'body_test1'

刪數(shù)據(jù)

#刪類別
In [24]: cate1 = Category.objects.get(name='test cate1')
In [26]: cate1.delete()
Out[26]: (1, {'blog.Category': 1})
#TODO練習(xí):刪除post數(shù)據(jù)
In [27]: post = Post.objects.get(id=1)

In [28]: post.delete()
Out[28]: (1, {'blog.Post_tags': 0, 'blog.Post': 1})

視圖

視圖函數(shù)

  • 修改了blog/views.py

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("歡迎學(xué)習(xí)Django讲婚!")
    
    

URL綁定

  • 配置項(xiàng)目URL:blogproj/urls.py

    ....
    from django.conf.urls import url,include
    
    urlpatterns = [
        ...
        url(r'',include('blog.urls'))
    ]
    
    
  • 在blog項(xiàng)目目錄下創(chuàng)建urls.py文件

    • 添加代碼

      from django.conf.urls import url,include
      from . import views
      
      urlpatterns = [
          url(r'', views.index, name='index')
      ]
      
      
  • 啟動(dòng)開發(fā)服務(wù)

    python manage.py runserver #默認(rèn)8000端口
    #Starting development server at http://127.0.0.1:8000/
    python manage.py runserver 127.0.0.1:8001 #指定端口啟動(dòng)
    
    

    瀏覽器訪問


模板系統(tǒng)

模板指靜態(tài)頁(yè)面(html)

靜態(tài)文件:css肴熏、js

  • 創(chuàng)建templates/blog目錄卧晓,新建index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{{ title }}</title>
    </head>
    <body>
    <h1>{{ welcome }}</h1>
    </body>
    </html>
    
    
{{ title }}怠晴,{{ welcome }}:模板變量

  • 修改views.py
def index(request):
    context = {'title':"Dylan的Blog", 'welcome':'歡迎來到我的博客'}
    return render(request, 'blog/index.html', context=context)

  • 刷新頁(yè)面


博客首頁(yè)

靜態(tài)文件

  • 拷貝模板
    • 項(xiàng)目目錄下創(chuàng)建static/blog目錄
    • 拷貝css和js到上述目錄
    • 拷貝index.html到templates/blog目錄
  • 修改settings
STATIC_ROOT = os.path.join(BASE_DIR,'static')  #新增

  • 修改index.html
{% load static %}
...
    <!-- css -->
    <link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">
    <link rel="stylesheet" >
    <link rel="stylesheet" href="{% static 'blog/css/pace.css' %}">
    <link rel="stylesheet" href="{% static 'blog/css/custom.css' %}">

    <!-- js -->
    <script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>
    <script src="{% static 'blog/js/bootstrap.min.js' %}"></script>
    <script src="{% static 'blog/js/pace.min.js' %}"></script>
    <script src="{% static 'blog/js/modernizr.custom.js' %}"></script>
</head>
...
<script src="{% static 'blog/js/script.js' %}"></script>
</body>
...
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末彼宠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诗力,更是在濱河造成了極大的恐慌凰浮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異袜茧,居然都是意外死亡屿良,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門惫周,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尘惧,“玉大人,你說我怎么就攤上這事递递∨绯龋” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵登舞,是天一觀的道長(zhǎng)贰逾。 經(jīng)常有香客問我,道長(zhǎng)菠秒,這世上最難降的妖魔是什么疙剑? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮践叠,結(jié)果婚禮上言缤,老公的妹妹穿的比我還像新娘。我一直安慰自己禁灼,他們只是感情好管挟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弄捕,像睡著了一般僻孝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上守谓,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天穿铆,我揣著相機(jī)與錄音,去河邊找鬼斋荞。 笑死荞雏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的譬猫。 我是一名探鬼主播讯檐,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼染服!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叨恨,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤柳刮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秉颗,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痢毒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚕甥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哪替。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖菇怀,靈堂內(nèi)的尸體忽然破棺而出凭舶,到底是詐尸還是另有隱情,我是刑警寧澤爱沟,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布帅霜,位于F島的核電站,受9級(jí)特大地震影響呼伸,放射性物質(zhì)發(fā)生泄漏身冀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一括享、第九天 我趴在偏房一處隱蔽的房頂上張望搂根。 院中可真熱鬧,春花似錦铃辖、人聲如沸兄墅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隙咸。三九已至,卻和暖如春成洗,著一層夾襖步出監(jiān)牢的瞬間五督,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工瓶殃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留充包,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓遥椿,卻偏偏與公主長(zhǎng)得像基矮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冠场,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容