Django框架(二)
一:Django項(xiàng)目創(chuàng)建步驟:
方式1:命令創(chuàng)建:
進(jìn)入指定目錄
C:\Users\bing>F:
F:\>cd mysite
F:\mysite>django-admin startproject mysite
F:\mysite>python manage.py startapp app01
F:\mysite>python manage.py startapp app02
F:\mysite>python manage.py startapp app03(一個(gè)Django項(xiàng)目可以有多個(gè)app)
admin:Django自帶后臺(tái)管理相關(guān)配置,用于操作數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)的創(chuàng)建,修改,刪除,數(shù)據(jù)表數(shù)據(jù)行的增刪改查),可以不用pymysql和Navicat操作數(shù)據(jù)庫(kù)了
apps.py:表示當(dāng)前app的配置文件
models.py:寫類,Django根據(jù)這個(gè)類來(lái)操作數(shù)據(jù)庫(kù)表(和SQLAlchemy相似,寫類和函數(shù)操作數(shù)據(jù)庫(kù))
test.py:快速做單元測(cè)試
views.py:視圖函數(shù)(業(yè)務(wù)處理)
migrations:創(chuàng)建數(shù)據(jù)庫(kù)表和行時(shí),Django自動(dòng)生成的文件
方式2:圖形界面創(chuàng)建Django項(xiàng)目
?二.
?
啟動(dòng)項(xiàng)目,輸入U(xiǎn)RL地址:http://127.0.0.1:8000/admin/出現(xiàn)一個(gè)登錄界面
?
?1.路由系統(tǒng):
url ->函數(shù)
a.一一對(duì)應(yīng)關(guān)系
/login/->def login()
b./add_user
HTML:有一個(gè)搜索引擎優(yōu)化(SEO),要想排名靠前就不要寫?<li>{{ i }} | <a href="/edit/?nid={{ i }}">編輯</a></li> 這樣的語(yǔ)句,如果是GET傳參,nid的值經(jīng)常變動(dòng),因?yàn)檫@種語(yǔ)句的權(quán)重比較低。
而要寫這樣的語(yǔ)句
http://127.0.0.1:8000/edit/?nid=ffffffff/(權(quán)重低)
http://127.0.0.1:8000/edit/ffffffff/(認(rèn)可,權(quán)重高) ? ?urls.py配置: ? url(r'^edit/(\w+)/', views.edit), ?r代表原生字符,(\w+)代表所有字母和數(shù)字,還有下劃線(a-z、A-Z、0-9、_)?
urls.py: ??url(r'^edit/(\w+).html/', views.edit) ?url可以寫正則表達(dá)式,(\w+)是動(dòng)態(tài)的,所以這樣的也叫動(dòng)態(tài)路由,如果是這樣:url(r'^edit/(\w+)/(\w+).html/', views.edit),#edit得有兩個(gè)參數(shù)去接收
?
?
?ORM操作表(創(chuàng)建表,增刪改查)
創(chuàng)建表:
class UserGroup(models.Model):"""部門"""title = models.CharField(max_length=32) 創(chuàng)建部門表 class UserInfo(models.Model):"""員工"""nid = models.BigAutoField(primary_key=True)user= models.CharField(max_length=32)password = models.CharField(max_length=64)# age = models.IntegerField(null=True)age = models.IntegerField(default=1)ug = models.ForeignKey("UserGroup",null=True)# ug自動(dòng)生成ug_id列 創(chuàng)建員工表6.創(chuàng)建數(shù)據(jù)表:
命令:
python manage.py makemigrations 第一條記錄相關(guān)日志
python manage.py migrate 第二條執(zhí)行結(jié)果
英文單詞: migrate:移動(dòng); 遷移,移往; 隨季節(jié)而移居;
nid = models.BigAutoField(primary_key=True) 這一行可以不用設(shè)置
Django里會(huì)自動(dòng)設(shè)置主鍵,主鍵名默認(rèn)為id,而且是自增id,null=True設(shè)置默認(rèn)為空或 default=1默認(rèn)值為1,CharField必須設(shè)置max_length最大長(zhǎng)度,不然程序會(huì)報(bào)錯(cuò)
ug = models.ForeignKey("UserGroup",null=True) 創(chuàng)建員工表的外鍵? ? ??# ug自動(dòng)生成ug_id列
Django1.8以后把settings中的TEMPLATE_DIRS配置項(xiàng)移到了TEMPLATES 下
TEMPLATE_DIRS = (os.path.join(BASE_DIR,'templates'), ) settings.py要隱藏的配置文件 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',],},}, ] settings.py文件里的目標(biāo)配置文件TEMPLATESmigrations下面的py文件不要?jiǎng)h,這個(gè)可以查看創(chuàng)建表和增刪改查表等操作的記錄,可以及時(shí)發(fā)現(xiàn)問題
1.python manage.py makemigrations的作用是執(zhí)行一次就讀取models.py文件里的類,然后在migrations目錄下生成配置文件,
2.python manage.py migrate拿著生成的配置文件去生成數(shù)據(jù)庫(kù)的語(yǔ)句
修改表里的列,比如員工表里的user改成username,然后執(zhí)行兩條命令就好了
1.python manage.py makemigrations
2.python manage.py migrate
?
?數(shù)據(jù)表的增刪改查
#1.新增:
def index(request):#增刪改查from app01 import models#新增models.UserGroup.objects.create(title='研發(fā)部')return HttpResponse('bing')
http://127.0.0.1:8000/app01/index.html 瀏覽器訪問,相當(dāng)于執(zhí)行了sql語(yǔ)句
#2.查:
group_list = models.UserGroup.objects.all() 查所有部門表信息 print(group_list) #輸出一個(gè)QuerySet對(duì)象 輸出:<QuerySet [<UserGroup: UserGroup object>, <UserGroup: UserGroup object>, <UserGroup: UserGroup object>, <UserGroup: UserGroup object>]>user_list = models.UserInfo.objects.all() 查所有員工表信息 print(user_list)輸出:<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
?
# 數(shù)據(jù)庫(kù)相關(guān)操作 def index(request):# 增刪改查from app01 import models# 新增# models.UserGroup.objects.create(title='銷售部') ----insert into # models.UserInfo.objects.create(user='root',password='pwd',age=18,ug_id=1)# 查找# group_list = models.UserGroup.objects.all() # group_list = models.UserGroup.objects.filter(id=1) filter相當(dāng)于where# group_list = models.UserGroup.objects.filter(id__gt=1) gt大于# group_list = models.UserGroup.objects.filter(id__lt=1) lt小于# 刪除# models.UserGroup.objects.filter(id=2).delete() 刪除相當(dāng)于delete from tablename where id=2;# 更新models.UserGroup.objects.filter(id=2).update(title='公關(guān)部') 相當(dāng)于update tablename set title='公關(guān)部' where id = 2;# group_list QuerySet類型(列表)# QuerySet類型[obj,obj,obj]# print(group_list)# for row in group_list:# print(row.id,row.title)輸出研發(fā)部,運(yùn)維部
# models.UserInfo.objects.all() group_list = models.UserGroup.objects.all()return render(request,'newindex.html',{"group_list": group_list})
?
轉(zhuǎn)載于:https://www.cnblogs.com/bingabcd/p/7066170.html
總結(jié)
以上是生活随笔為你收集整理的Django框架(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu配置vnc访问
- 下一篇: 浅谈HashMap的实现原理