1. 程式人生 > >python第一百零五天 ---Django 基礎

python第一百零五天 ---Django 基礎

moni lec primary test sage install 允許 os.path com

一   路由系統  URL
1 url(r‘^index/‘,views.index) url(r‘^home/‘, views.Home.as_view())
2 url(r‘^detail-(\d+).html‘,views.detail),#動態路由
views.py
def detail(request,nid)
url(r‘^detail-(\d+)_(\d+).html‘,views.detail),#動態路由
def detail(request,nid,uid)
3 url(r‘^detail-(?P<nid>\d+)_(?P<uid>\d+).html‘,views.detail),#關鍵字分組
def detail(request,*args,**kwargs)
args[index]# 索引
kwargs[key]

4 name
對URL路由關系進行命名,以後可以根據 此名稱生成自己想要的URL
url(r‘abcd‘,views.detail,name=‘indexx1‘),#定義url 的名字
模板語言 {% url ‘indexx1‘%}
def func(request,*args,**kwargs):
from django.urls import reverse
indexx1=reverse(‘indexx1)‘# url=/abcd/

url(r‘fff/(\d+)/‘,views.detail,name=‘indexx2‘),#定義url 的名字
模板語言 {% url ‘indexx2‘ 2%}
def func(request,*args,**kwargs):
from django.urls import reverse
indexx2=reverse(‘indexx2‘,args=(1,2,)‘ #url=/fff/1/2/

url(r‘ggg/?P<nid>(\d+)/?P<uin>(\d+)/‘,views.detail,name=‘indexx3‘),#定義url 的名字
模板語言 {% url ‘indexx3‘ nid=1 uid=3%}
def func(request,*args,**kwargs):
from django.urls import reverse
indexx3=reverse(‘indexx2‘,kwargs=(nid=1,uid=2)‘ # url=/ggg/1/2


form action =‘{%url ‘indexx‘ 2 %} #表單 提交的url
#request.path_info :當前頁面的url
form action =‘{{request.path_info }} #表單 提交的url 是當前頁面
5 路由分發
from django.conf.urls import include
主路由:
urlpatterns=[
url(r‘^cmdb/‘,include(‘cmdb.urls‘) #分路由
url(r‘^monitor/‘,include(‘monitor.urls‘) #分路由
]
分路由: cmdb
urlpatterns=[
url(r‘^login/‘,views.login‘)
url(r‘^index/‘,views.index‘)

]


二 視圖
1 獲取用戶請求數據
request.GET
request.POST
request.FILES
GET:獲取數據
POST:提交數據

#多選
2.checkbox 等多選 的內容
request.POST.getlist()

3. #上傳文件 form標簽 添加屬性 enctype=multipart/form-data
obj.request.FILES.get(‘filename‘)
obj.name #文件名
file_path=os.path.join(‘FILE_DIR‘,obj.name)
f=open(file_path,mode=‘wb‘)
for i in obj.chunks()
f.write(i)
f.close()
三 模板

四 ORM 操作
select * from tb where id >1
#對應關系
models.tb.objects.filter(id_gt=1)#查詢
1 創建類
a from django.db import models
class UserInfo(models.Model):
#自動創建 自增的ID 主鍵
#用戶名列, 字符串類型 指定長度
username=models.CharField(max_length=32)
password=models.CharField(max_length=32)
python manage.py makemigrations
python manage.py migrate
b.使用
INSTALLED_APPS = [
‘django.contrib.admin‘,
‘django.contrib.auth‘,
‘django.contrib.contenttypes‘,
‘django.contrib.sessions‘,
‘django.contrib.messages‘,
‘django.contrib.staticfiles‘,
‘newapp‘,#指定對應的app
]

c.執行命令
python manage.py makemigrations #查看數據庫表的修改記錄
python manage.py migrate #創建 數據庫 以及表結構
d. ###########連接使用Mysql 註意#################
Django 默認使用MySQLdb模塊連接MySQL
主動修改為 pymysql: 在project同名文件夾下的__init__文件中
import pymysql
pymysql.install_as_MySQLdb()


- 根據類自動創建數據庫表
python manage.py makemigrations #數據庫修改日記
python manage.py migrate#創建表結構

- 根據類對數據庫表中的數據進行各種操作

#添加一條記錄
#方法一
models.UserInfo.objects.create(username=‘root‘,password=‘root‘)
#方法二
obj=models.UserInfo(username=‘root2‘,password=‘root2‘)
obj.save()
#方法三
dic={‘username‘:‘root3‘,‘password‘:‘root3‘}
models.UserInfo.objects.create(**dic)

字段數據類型
BooleanField(Field)
- 布爾值類型

NullBooleanField(Field):
- 可以為空的布爾值

CharField(Field)
- 字符類型
- 必須提供max_length參數, max_length表示字符長度

TextField(Field)
- 文本類型

EmailField(CharField):
- 字符串類型,Django Admin以及ModelForm中提供驗證機制

GenericIPAddressField(Field)
- 字符串類型,Django Admin以及ModelForm中提供驗證 Ipv4和Ipv6
- 參數:
protocol,用於指定Ipv4或Ipv6, ‘both‘,"ipv4","ipv6"
unpack_ipv4, 如果指定為True,則輸入::ffff:192.0.2.1時候,可解析為192.0.2.1,開啟刺功能,需要protocol="both"

URLField(CharField)
- 字符串類型,Django Admin以及ModelForm中提供驗證 URL

SlugField(CharField)
- 字符串類型,Django Admin以及ModelForm中提供驗證支持 字母、數字、下劃線、連接符(減號)

CommaSeparatedIntegerField(CharField)
- 字符串類型,格式必須為逗號分割的數字

UUIDField(Field)
- 字符串類型,Django Admin以及ModelForm中提供對UUID格式的驗證

FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供讀取文件夾下文件的功能
- 參數:
path, 文件夾路徑
match=None, 正則匹配
recursive=False, 遞歸下面的文件夾
allow_files=True, 允許文件
allow_folders=False, 允許文件夾

FileField(Field)
- 字符串,路徑保存在數據庫,文件上傳到指定目錄
- 參數:
upload_to = "" 上傳文件的保存路徑
storage = None 存儲組件,默認django.core.files.storage.FileSystemStorage

ImageField(FileField)
- 字符串,路徑保存在數據庫,文件上傳到指定目錄
- 參數:
upload_to = "" 上傳文件的保存路徑
storage = None 存儲組件,默認django.core.files.storage.FileSystemStorage
width_field=None, 上傳圖片的高度保存的數據庫字段名(字符串)
height_field=None 上傳圖片的寬度保存的數據庫字段名(字符串)

DateTimeField(DateField)
- 日期+時間格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

DateField(DateTimeCheckMixin, Field)
- 日期格式 YYYY-MM-DD

TimeField(DateTimeCheckMixin, Field)
- 時間格式 HH:MM[:ss[.uuuuuu]]

DurationField(Field)
- 長整數,時間間隔,數據庫中按照bigint存儲,ORM中獲取的值為datetime.timedelta類型

FloatField(Field)
- 浮點型

DecimalField(Field)
- 10進制小數
- 參數:
max_digits,小數總長度
decimal_places,小數位長度

BinaryField(Field)
- 二進制類型

字段參數
null=True 數據庫中字段是否可以為空
db_column 數據庫中字段的列名
db_tablespace
default 數據庫中字段的默認值
primary_key 數據庫中字段是否為主鍵
db_index 數據庫中字段是否可以建立索引
unique 數據庫中字段是否可以建立唯一索引
unique_for_date 數據庫中字段【日期】部分是否可以建立唯一索引
unique_for_month 數據庫中字段【月】部分是否可以建立唯一索引
unique_for_year 數據庫中字段【年】部分是否可以建立唯一索引

auto_now_add 數據庫中添加記錄的日期時間
auto_now 數據庫中更新當前記錄的日期時間 特定 查詢更新方法
-- obj=UserGroup.objects.filter(id=1).first()
obj.caption=‘xxx‘
obj.save

verbose_name Admin中顯示的字段名稱
blank Admin中是否允許用戶輸入為空
editable Admin中是否可以編輯
help_text Admin中該字段的提示信息
choices Admin中顯示選擇框的內容,用不變動的數據放在內存中從而避免跨表操作
如:gf = models.IntegerField(choices=[(0, ‘何穗‘),(1, ‘大表姐‘),],default=1)

error_messages 自定義錯誤信息(字典類型),從而定制想要顯示的錯誤信息;
字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{‘null‘: "不能為空.", ‘invalid‘: ‘格式錯誤‘}

validators 自定義錯誤驗證(列表類型),從而定制想要的驗證規則
from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\
MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
如:
test = models.CharField(
max_length=32,
error_messages={
‘c1‘: ‘優先錯信息1‘,
‘c2‘: ‘優先錯信息2‘,
‘c3‘: ‘優先錯信息3‘,
},
validators=[
RegexValidator(regex=‘root_\d+‘, message=‘錯誤了‘, code=‘c1‘),
RegexValidator(regex=‘root_112233\d+‘, message=‘又錯誤了‘, code=‘c2‘),
EmailValidator(message=‘又錯誤了‘, code=‘c3‘), ]
)


python第一百零五天 ---Django 基礎