Django 基礎操做

django是一個重量級的python服務端開發框架,咱們能夠用它來開發一些後端服務和網站,這篇博客學習一下django的基本操做

1、安裝 Django

pip install django

2、建立、啓動項目

1 django-admin startproject dj_test #建立一個django項目
2 cd dj_test #進入項目目錄
3 python manange.py runserver #運行

⚠️ django-admin命令在django安裝完成以後就有了,若是django安裝成功了沒有django-admin命令,請檢查python安裝目錄下的scripts目錄是否加入環境變量。css

運行完成在瀏覽器裏面訪問 127.0.0.1:8000就能夠看到項目正常運行,以下圖html

 

 3、建立應用

建立完項目以後,在項目裏建立一個應用,也就是各個模塊,好比說一個商城系統,有訂單模塊、用戶模塊、商品模塊等等。也能夠只有一個模塊。前端

python manage.py startapp user   #建立一個user模版

項目和應用建立完成以後,再建立2個目錄,templates和static,templates放html文件,static放靜態文件,js和css文件,目錄結構是這樣的,以下圖:  python

 

4、Django 經常使用配置修改

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'user' #加入本身寫的模塊
] 
#INSTALLED_APPS,這個是管裏面有哪些子模塊,user是我們本身建立的模塊,若是須要使用,就要加入到裏面
 
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是配置模板的地方,要修改的是DIRS這個,修改爲本身的templates目錄
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #數據庫引擎改成mysql
        'NAME': 'db_name',#數據庫名稱
        'USER': 'db_user',#用戶
        'PASSWORD': 'db_password',#密碼
        'HOST': '127.0.0.1',#ip
        'PORT': '3306',#端口號
    }
}
#DATABASES 是數據庫的配置,這裏默認使用的是sqlite數據庫,若是要改爲mysql的話,修改爲上面寫的
#注意,使用mysql數據庫的話,須要注意如下2點
#一、數據庫使用mysql的話,須要安裝pymysql模塊
#二、在項目同名的文件夾的__init__.py文件裏面加入
#   import pymysql
#   pymysql.install_as_MySQLdb()
 
LANGUAGE_CODE = 'zh-Hans'
#LANGUAGE_CODE是語言,默認是英文的,這裏改爲中文
 
TIME_ZONE = 'Asia/Shanghai'
 
#TIME_ZONE是時區,默認是標準時區的,這裏改完中國的時區
 
 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
) #靜態文件的目錄
 
#STATICFILES_DIRS是靜態文件的目錄,放一些css、js,static文件夾須要本身建立

 

5、數據庫

若是用 mysql 數據庫的話,要在__init__文件裏面加入下面的代碼。這是由於 Django 裝 mysql 模塊比較麻煩。mysql

import pymysql
pymysql.install_as_MySQLdb()

models.py - 定義表結構的地方。sql

同步到數據庫(表結構更改時才須要同步)的操做:數據庫

python manage.py makemigrations #生成遷移文件,後面能夠跟一個參數,表示指定更新哪一個模塊的代碼
python manage.py migrate #同步到數據庫中

建表的內容:django

 1 class Nav(models.Model):
 2     name = models.CharField(max_length=10,unique=False,verbose_name='導航名稱') #字段名,字符串格式
 3     is_delete = models.SmallIntegerField(default=1,verbose_name='是否被刪除')
 4     create_time = models.DateTimeField(verbose_name='建立時間',auto_now_add=True) #自動把建立時間設置爲當前時間
 5     update_time = models.DateTimeField(auto_now=True,verbose_name='更新時間') #自動更新爲當前時間
 6 
 7     def __str__(self):
 8         return self.name
 9 
10     class Meta:
11         verbose_name = '導航表' #顯示在後臺的表名
12         verbose_name_plural = verbose_name
13         db_table = 'nav'
14         # ordering = ['create_time']  #默認根據哪一個字段排序

實用的枚舉方法:(第四、5行)後端

 1 class Student(models.Model):
 2     name = models.CharField(max_length=10) #int類型不須要最大長度
 3     #枚舉舉例
 4     sex_choice = ((0,''),(1,''))
 5     sex = models.SmallIntegerField(choices=sex_choice,verbose_name='性別')
 6     content = models.TextField() #存長文本的
 7     img = models.ImageField(upload_to='touxiang')
 8     file = models.FileField(upload_to='wenjian')
 9     create_time = models.DateTimeField(auto_new_add=True)#建立時間
10     update_time = models.DateTimeField(auto_now)#更新爲如今的時間
11 
12     def __str__(self):
13         return self.name
14 
15 class Meta:
16     db_table = 'student' #指定表名,默認app名+類名
17     ordering = ['-id']    #默認按什麼排序
18     verbose_name_plural = '學生表'
19     verbose_name = '學生表'

 對錶的增刪該查:瀏覽器

 1 # 數據庫的增刪改查
 2 os.environ.setdefault('DJANGO_SETTINGS_MODULE','dj_test.settings') #設置Django的配置文件
 3 django.setup() #鏈接數據庫
 4 
 5 
 6 from user import models
 7 from django.db.models import Q
 8 
 9 #新增
10 for i in range(5):
11     models.Nav.objects.create(name='個人日記%d'%i)
12 
13 # 實例化的方式新增
14 nav_obj = models.Nav(name='個人心情')
15 nav_obj.save()
16 
17 #查詢
18 result = models.Nav.objects.get(name='個人日記')    #get 須要保證查出來的數據只有一條
19 result2= models.Nav.objects.filter(is_delete=1)
20 
21 print(result)
22 print(result2)
23 
24 # 模糊查詢
25 result2= models.Nav.objects.filter( name__contains='個人')
26 result2= models.Nav.objects.filter(id__gt = 0) #大於0
27 result3= models.Nav.objects.filter(id__gte = 1) #大於等於1
28 result4= models.Nav.objects.filter(id__lt = 2) #小於2
29 result5= models.Nav.objects.filter(id__lte = 2) #小於等於2
30 result6 = models.Nav.objects.filter(id_range=[1,5]) #範圍
31 result7 = models.Nav.objects.filter(id__in=[1,2,3,5]) #在這幾個數中
32 result8 = models.Nav.objects.exclude(name='個人心情') #排除
33 print(result8)
34 
35 #
36 result9 = models.Nav.objects.filter(Q(id__in=[1,2,3])|Q(name__contains='4'))
37 print(result9)
38 
39 # 獲取表裏全部數據
40 all = models.Nav.objects.all()
41 
42 # 修改
43 n = models.Nav.objects.get(name__contains='%')
44 n2 = models.Nav.objects.filter(pk=1) #primay key
45 n.name='個人手賬'
46 n.is_delete = 0
47 n.save()
48 
49 # 篩選後刪除
50 models.Nav.objects.filter(is_delete=1).update(is_delete=0)
51 models.Nav.objects.filter(is_delete=0).update(is_delete=1)
52 
53 # 刪除
54 models.Nav.objects.all().delete() #刪除全部
55 models.Nav.objects.filter(id__lt=2).delete()

以上,models 是建表文件,Nav 是表名。

6、學習中的雜記

1. 頁面定義(和邏輯)寫在 view,index 做爲入口的主界面,url 和 view 之間的關聯在於 urls 中配了指定的路徑訪問指定的頁面。

多個頁面中有一樣的部分時(好比相似於頁眉頁腳的存在),能夠抽成公共的部分,保存爲 base.html 文件

其中:

#body:
    {% block content %}
    {% endblock %}

#head:
    {% block css %}
    {% endblock %}

    {% block js %}
    {% endblock %}

繼承時寫: {% extends 'base.html' %} 

2. 上下文處理器

這部分是關於公共數據的處理,好比有的數據用到好幾回,不必每次都重寫。個人項目中位於:dj_test.content_process.py

1 from user import models
2 
3 def nav_title_process(request):
4     # navs = ['python', '前端', 'django', '啦啦啦']
5     # title = 'xiaohei的我的博客'
6     navs = models.Nav.objects.filter(is_delete=1)  # query_set
7     title = '小黑的博客'
8     content = {'daohang':navs,'title':title}
9     return content

關於前端頁面使用時的調用(第6-8行):

 1 <header class="header-navigation" id="header">
 2     <nav>
 3         <div class="logo"><a href="/">{{title}}</a></div>
 4         <h2 id="mnavh"><span class="navicon"></span></h2>
 5         <ul id="starlist">
 6             {% for nav in daohang %}
 7             <li><a href="/nav/{{nav.id }}">{{nav.name}}</a></li>
 8             {% endfor %}
 9 
10         </ul>
11     </nav>
12 </header>

這個的配置要加在 setting-TEMPLATES 中

3. views 的具體用法

 1 from django.shortcuts import render,HttpResponse
 2 
 3 # Create your views here.
 4 
 5 #專門寫邏輯的
 6 
 7 def index(request): #格式要求寫request
 8 
 9     article = [
10         {'title':'第一篇文章','content':'123ksjdfkahf'},
11         {'title':'The Second','content':'1232423'}
12     ]
13     dic = {'articles':article}
14     return render(request,'index.html',dic)
15 # render 用於返回html時,返回的dic位置的東西能夠直接在html中用

views 中寫的方法,在定義 URL 的時候添加了調用,所以方法定義中的數據,能夠在對應的頁面中引用。使用 render 返回 html,就是爲了解析那些對變量的引用,引用方法是「{{name}}」。

學完一週有的地方記不住了,因此記錄不是很完善,以後再作補充。

o

O

End

相關文章
相關標籤/搜索