#!/usr/bin/env python # -*- coding:utf-8 -*- import django print(django.get_version()) D:\辦公軟件\python-3.5.4\python.exe E:/Python/Python自動化開發/day15/Django/a.py 1.11.13
from django.contrib import admin from django.urls import path #應用blog下的views文件 from blog import views urlpatterns = [ url(r'^admin/', admin.site.urls), #對應關係;調用views裏的index函數【首頁】【http://127.0.0.1:8800/blog/】 url(r'^blog/', views.index), ]
from django.shortcuts import render,HttpResponse # Create your views here. #必須加參數;通常都用request【是請求信息對象】;HttpResponse【是響應信息對象】 def index(request): #返回一個字符串 #return HttpResponse("<h1>welcome python zhangyu</h1>") #返回頁面;第一次參數是request;第二個參數是在templates目錄下的文件;不須要導入;直接寫就能夠 return render(request,"index.html")
""" urlpatterns = [ url(正則表達式, views視圖函數,參數,別名), ] 參數說明: 一個正則表達式字符串 一個可調用對象,一般爲一個視圖函數或一個指定視圖函數路徑的字符串 可選的要傳遞給視圖函數的默認參數(字典形式) 一個可選的name參數 """
urlpatterns = [ url(r'^admin/', admin.site.urls), #對應關係;調用views裏的index函數【首頁】【http://127.0.0.1:8800/blog/】 url(r'^blog/', views.index), url(r'^articles/2003/$', views.special_case_2003), #有括號的話就是單一個參數;要在視圖views.year_archive里加參數 url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ] 1 一旦匹配成功則再也不繼續 2 若要從URL 中捕獲一個值,只須要在它周圍放置一對圓括號。 3 不須要添加一個前導的反斜槓,由於每一個URL 都有。例如,應該是^articles 而不是 ^/articles。 4 每一個正則表達式前面的'r' 是可選的可是建議加上。 一些請求的例子: /articles/2005/3/ 不匹配任何URL 模式,由於列表中的第三個模式要求月份應該是兩個數字。 /articles/2003/ 將匹配列表中的第一個模式不是第二個,由於模式按順序匹配,第一個會首先測試是否匹配。 /articles/2005/03/ 請求將匹配列表中的第三個模式。Django 將調用函數 views.month_archive(request, '2005', '03')。
關鍵字參數也對應 #有括號的話就是單一個參數;要在視圖views.year_archive里加參數 url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/([0-9]+)/$', views.article_detail), 在視圖參數裏;即便參數位置變化也能取到值 def article_detail(request,year,month,id):
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login,name="LOGIN"), ]
<h1>登陸頁面</h1> {# <form action="/index/" method="post">#} <form action="{% url 'LOGIN' %}" method="post"> 用戶名:<p><input type="text" name="username"></p> 密碼:<p><input type="password" name="pwd"></p> <input type="submit" value="submit"> </form> </body>
from django.conf.urls import url,include from django.contrib import admin #應用blog下的views文件 from blog import views urlpatterns = [ url(r'^timer/',views.timer), ]
import datetime def timer(req): #當前時間 t=datetime.datetime.now() #返回當前時間 return HttpResponse("<h1>Current time:%s</h1>" %t)
''' path: 請求頁面的全路徑,不包括域名 method: 請求中使用的HTTP方法的字符串表示。全大寫表示。例如 if req.method=="GET": do_something() elif req.method=="POST": do_something_else() GET: 包含全部HTTP GET參數的類字典對象 POST: 包含全部HTTP POST參數的類字典對象 COOKIES: 包含全部cookies的標準Python字典對象;keys和values都是字符串。 FILES: 包含全部上傳文件的類字典對象;FILES中的每個Key都是<input type="file" name="" />標籤中 name屬性的值,FILES中的每個value同時也是一個標準的python字典對象,包含下面三個Keys: filename: 上傳文件名,用字符串表示 content_type: 上傳文件的Content Type content: 上傳文件的原始內容 user: 是一個django.contrib.auth.models.User對象,表明當前登錄的用戶。若是訪問用戶當前 沒有登錄,user將被初始化爲django.contrib.auth.models.AnonymousUser的實例。你 能夠經過user的is_authenticated()方法來辨別用戶是否登錄: if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware 時該屬性纔可用 session: 惟一可讀寫的屬性,表明當前會話的字典對象;本身有激活Django中的session支持時該屬性纔可用。 '''
import datetime def timer(req): #當前時間 t=datetime.datetime.now() #返回當前時間 #return HttpResponse("<h1>Current time:%s</h1>" %t) #返回結果使用render渲染; """ 一、render會找到timer.html模版文件; 二、在timer.html文件裏找到{{}}在裏面寫Time; 如:<h1>Current time: {{ Time }}</h1> """ return render(req,"timer.html",{"Time":t})
<body> {# 把後端的變量嵌套進入前端頁面#} <h1>Current time: {{ Time }}</h1> </body>
urlpatterns = [ url(r'^login/', views.login,name="LOGIN"), url(r'^back',views.back), ]
def login(req): if req.method=='POST': username=req.POST.get('username',None) password=req.POST.get('pwd',None) if username=='alex' and password=='123': #return HttpResponse("登錄成功") #若是登陸成功轉到back的URL return redirect("/back") return render(req,'login.html') def back(req): name="alex" #locals表示當前函數內的全部變量;在back文件裏直接寫{{name}}就能夠 return render(req,"back.html",locals())
<body> <h1>登陸頁面</h1> {# <form action="/index/" method="post">#} <form action="{% url 'LOGIN' %}" method="post"> 用戶名:<p><input type="text" name="username"></p> 密碼:<p><input type="password" name="pwd"></p> <input type="submit" value="submit"> </form> </body>
<body> <h1>hello {{ name }}</h1> </body>
from django.db import models # Create your models here. #ORM:對象關係映射【python的類-----數據表 # python的類實例-----表的記錄 # python的類屬性-----表的字段 #建立Books表 class Books(models.Model): #主鍵 #nid=models.IntegerField(primary_key=True) #標題-字符串-32字節 title=models.CharField(max_length=32) #做者 author=models.CharField(max_length=32) #價格 price=models.FloatField() #出版時間 pub_date=models.DateField()
from django.conf.urls import url,include from django.contrib import admin #應用blog下的views文件 from blog import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login,name="LOGIN"), #對應關係;調用views裏的index函數【首頁】【http://127.0.0.1:8800/blog/】 url(r'^blog/', include('blog.urls')), url(r'^timer/',views.timer), url(r'^back',views.back),#查看在這裏作的 url(r'^add_books',views.add_books),#增長 url(r'^delete_books',views.delete_books),#刪除 url(r'^edit_books',views.edit_books),#修改 ]
from django.shortcuts import render,HttpResponse,redirect # Create your views here. #必須加參數;通常都用request【是請求信息對象】;HttpResponse【是響應信息對象】 def index(request): #返回一個字符串 #return HttpResponse("<h1>welcome python zhangyu</h1>") #返回頁面;第一次參數是request;第二個參數是在templates目錄下的文件;不須要導入;直接寫就能夠 return render(request,"index.html") def login(req): if req.method=='POST': username=req.POST.get('username',None) password=req.POST.get('pwd',None) if username=='alex' and password=='123': #return HttpResponse("登錄成功") #若是登陸成功轉到back的URL return redirect("/back") return render(req,'login.html') #引用models模塊 from blog.models import * #ORM-查看數據 def back(req): #這裏要注意在html文件裏怎麼去obg_list的值 obg_list=Books.objects.all() #locals表示當前函數內的全部變量;在back文件裏直接寫{{name}}就能夠 return render(req,"back.html",locals()) #ORM-增長數據 def add_books(request): #建立記錄的兩種方式:1/create 2/save #注意:pub_date是Datetime數據類型;格式固定【2018-05-10】 #Books.objects.create(title="python",author="egon",price=89,pub_date="2018-05-10") b=Books(title="JAVA",author="zhangyu",price=11,pub_date="2111-11-11") #調用save;保存到數據庫 b.save() #return HttpResponse("添加成功!!!") return redirect("/back/") #ORM-刪除數據 def delete_books(req): #取/delete_books?id=3裏面的id id=req.GET.get("id") #filter帥選過濾;而後刪除 Books.objects.filter(id=id).delete() return redirect("/back/") #ORM-編輯數據 def edit_books(req): id = req.GET.get("id") #filter和get都是篩選條件;filter取到的是集合對象;get是單一對象 # b=Books.objects.get(id=id) # b.price=100 # b.save()#效率低 Books.objects.filter(id=id).update(price=100) return redirect("/back/")
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>hello {{ name }}</h1> <h1>書籍管理工具</h1> {#注意這裏的變量;深度變量的查找(萬能的句點號)#} {% for obj in obg_list %} <p>書名{{ obj.title }} 做者{{ obj.author }} 日期{{ obj.pub_date }} 價格{{ obj.price }} <a href="/delete_books/?{{ obj.id }}">刪除</a> <a href="/edit_books/?id=5">編輯</a></p> {% endfor %} <a href="/add_books/">添加</a> </body> </html>