寫法:url(r'^login/v2/', views.login,name='xx'), 視圖中反向解析: from django.urls import reverse def login(request): print(reverse('xx')) #/login/v2/ if request.method == 'GET': return render(request,'login.html') else: uname = request.POST.get('uname') pwd = request.POST.get('pwd') if uname == 'chao' and pwd == '123': return HttpResponse('ok') else: return redirect(reverse('xx')) #使用反向解析 html模板渲染時反向解析的語法{% url 別名 %} <form action="{% url 'xx' %}" method="post"> {% csrf_token %} 用戶名:<input type="text" name="uname"> 密碼:<input type="text" name="pwd"> <input type="submit"> </form>
1 項目文件夾下的urls.py文件中寫上如下內容 from django.conf.urls import url,include urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include('app01.urls',namespace='app01')), # url(r'^app02/', include('app02.urls',namespace='app02')), #http://127.0.0.1:8000/index/ ] 2 在各個app應用文件夾下面建立urls.py文件 在urls.py文件中寫本身應用的各個路徑,好比app01 和 app02 app01: from django.conf.urls import url, include from django.contrib import admin from app01 import views urlpatterns = [ url(r'^index/', views.index,name='index'), ] app02: from django.conf.urls import url, include from django.contrib import admin from app02 import views urlpatterns = [ url(r'^index/', views.index,name='index'), ]
寫法:url(r'^app01/', include('app01.urls',namespace='app01')), 將每一個應用本身的url路徑劃分一個空間,未來經過別名反向解析時,經過空間名稱能夠找到對應應用下面的路徑 使用: views.py文件中寫法 from django.urls import reverse def index(request): print('app01反向解析:', reverse('app01:index')) # app01反向解析: /app02/index/ return HttpResponse('app01-index') html中寫法: {% url 'app01:login' %}
object relational mapping 對象關係映射html
使用:python
第一步: 在應用文件夾下面的models.py文件中寫對應的類,看下面的示例:mysql
class UserInfo(models.Model): id = models.AutoField(primary_key=True) username = models.CharField(max_length=10) password = models.CharField(max_length=32)
第二步:作數據庫配置,settings.py文件中寫上如下配置sql
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } 鏈接mysql的配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'orm01', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'123' } }
第三步: 在項目文件夾下的的init文件中寫上如下內容,來指定pymysql做爲鏈接客戶端數據庫
import pymysql pymysql.install_as_MySQLdb()
第四步: 執行數據庫同步指令,在終端中執行django
python3.6 manage.py makemigrations #在migrations文件夾下面生成記錄文件 python3.6 manage.py migrate #執行記錄文件
表就建立好了,咱們的表名就是: 應用名_類名小寫app
建立: 方式一: obj=models.book_list( book_name='潘金蓮後傳' publisher='河南出版社' ) obj.save() 方式二: models.book_list.object.create( book_name='潘金蓮後傳' publisher='河南出版社' )
方式一: models.book_list.object.filter(id=1).update( book_name='潘金蓮後傳2' publisher='河南出版社1' ) 方式二: obj=models.book_list.objects.filter(id=1)[0] obj.book_name='潘金蓮後傳2' obj. publisher='河南出版社1' obj.save() 批量建立: list_obj = [] for i in range(10): obj = models.book( book_name = 'xx%s'%i, publisger = '北京%s'%i) models.book.objects.bulk_create(list_obj) update_or_create 有就更新,沒有就建立 a,b = models.book.objects.update_or_create( obj.book_name='潘金蓮後傳2' obj. publisher='河南出版社1' ) print(a) # 當前更新後的model對象,或者是你新增的記錄的model對象 print(b) # 新增就是True,查詢就False
簡單查詢: ret=models.book.objects.filter(id=1) 就是查詢到id爲1 的數據 獲得一個對象列表 obj=ret[0] 就是獲得一個列表 獲得列表裏的屬性就可使用萬能的點 例如: obj.name obj.price
.all() jiushi 獲得全部的數據 #filter和get # ret = models.UserInfo.objects.get(age=18) # ret = models.UserInfo.objects.filter(age=180) # get兩個報錯,可是get請求返回的結果就是那個model對象 # 1 UserInfo matching query does not exist. 啥也沒查到 # 2 get() returned more than one UserInfo -- it returned 11! 結果多了,不行! # fitler不會報錯 返回結果是一個queryset類型的集合,裏面是一個一個的model對象 注意: .filter() 就是根據條件進行篩選 從而得到數據 .exclude() 就是排除知足條件的數據 從而獲得剩下的數據 能夠和.all().exclude() .filter.exclude() 使用 .order_by('屬性') models.Book.objects.all().order_by('price')根據屬性的升序排列 若是想降序就在屬性的前面添加一個'-'號 好比:'-price' .count() 統計數據庫中對象的數量 ret = models.book.objects.all().count() .exists() 檢驗該數據是否在數據庫中 .valuse() 調用指定的屬性值 models.book.objects.values('price','name') .values_list(*field): 它與values()很是類似,它返回的是一個元組序列,values返回的是一個字典序列 <13> distinct(): values和values_list獲得的queryset類型的數據來調用,從返回結果中剔除重複紀錄 ret = models.UserInfo.objects.all().values('age','username').distinct() ret = models.UserInfo.objects.values('age','username').distinct()
models.Book.objects.create( # publish_date = "2019-08-01", 字符串 # publish_date = datetime.datetime.now(), 時間日期數據 )