Django 創建項目

url別名和反向解析

寫法: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>

include路由分發

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命名空間

寫法: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' %}

數據庫操做

orm

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

查詢方法:13個方法,必知必會

.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(), 時間日期數據
        )
相關文章
相關標籤/搜索