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