• <menu id="sssag"></menu>
  • <menu id="sssag"></menu>
  • 昨日內容回顧

    • JsonResponse類
    # 視圖函數必須返回一個HttpResponse對象	
    	HttpResponse
    	redirect
    	render
    
    # json格式的數據
    	序列化:
    		import json
    		dumps
    		loads
        
    	反序列化
    
    
    from django.http import JsonResponse
    
    return JsonResponse('字典', json_dumps_params={'ensure_ascii':False}, safe=False)
    
    • form表單上傳文件
    form表單:
    	'''
    		1. 提交數據的方式必須是:post
    		2. enctype='form-data'
    	'''
        
    后端如何處理:
    	request.GET
    	request.POST
    	request.FILES : 文件數據都在這個里面
    
    • CBV和FBV
    # FBV: function based view
    
    # CBV: 
    	class based view
        
    # 路由
    '''
    必須繼承View
    '''
    
    from django.views import View
    
    fbv: url('', views.index)
    cbv:url('', views.類名.as_view())
    
    # 一旦請求來了,會自動觸發View.view()
    
    • 模板語法
    # 1. 傳值
    	1.1 {}
    	1.2 locals()
    	1.3 所有數據類型都允許傳值
    '''強調:一般能在python代碼中實現的功能,都不要在頁面中實現'''
    
    # 2. 過濾器:
    	# 相當于內置方法
    	2.1 length
    	2.2 default
    	2.3 date
    	2.4 filesizeformat
    	2.5 safe
    	...
    

    今日內容概要

    • 模板語法之標簽
    • 模板語法繼承
    • 模板導入
    • 測試環境的搭建
    • ORM的查詢方法
    • 基于雙下滑線的查詢
    • 外鍵字段的增刪改查

    內容詳細

    1. 模板語法之標簽

    # 在urls.py路由文件中添加:
    url(r'^index/', views.index),
        
        
    # 在views.py文件中寫入:
    def index(request):
        dict = {'jason': 123, 'ly': 456}
        # l = [1, 2, 3, 4, 5, 6]
        return render(request, 'index.html', locals())
    
    
    # 新建 index.html文件:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <link  rel="stylesheet">
        <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
    </head>
    <body>
    {#{% for foo in l %}#}
    {#    <p>#}
    {#     {{ forloop }}#}
    {#        {% if forloop.first %}#}
    {#            第一次#}
    {#        {% elif forloop.last %}#}
    {#            最后一次#}
    {#        {% else %}#}
    {#            {{ foo }}#}
    {#        {% endif %}#}
    {#    </p>#}
    {#{% endfor %}#}
    
    {% for foo in dict.keys %}
        <p>{{ foo }}</p>
    {% endfor %}
    
    {% for foo in dict.values %}
        <p>{{ foo }}</p>
    {% endfor %}
    
    {% for foo in dict.items %}
        <p>{{ foo }}</p>
    {% endfor %}
    
    </body>
    </html>
    

    image

    image

    2. 模板繼承

    # 一個頁面被其他頁面公共使用
    
    # 在urls.py路由文件中添加:
    url(r'^reg/', views.reg),
    url(r'^login/', views.login),
        
    # 在views.py文件中添加:
    def reg(request):
        return render(request, 'reg.html')
    
    def login(request):
        return render(request, 'login.html')
    
    
    # home.html文件內容:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <link  rel="stylesheet">
        <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
        {% block css %}
    
        {% endblock %}
    </head>
    <body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                        data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#">Brand</a>
            </div>
    
            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
                    <li><a href="#">Link</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">Dropdown <span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="#">Action</a></li>
                            <li><a href="#">Another action</a></li>
                            <li><a href="#">Something else here</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">Separated link</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">One more separated link</a></li>
                        </ul>
                    </li>
                </ul>
                <form class="navbar-form navbar-left">
                    <div class="form-group">
                        <input type="text" class="form-control" placeholder="Search">
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
                </form>
                <ul class="nav navbar-nav navbar-right">
                    <li><a href="#">Link</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">Dropdown <span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="#">Action</a></li>
                            <li><a href="#">Another action</a></li>
                            <li><a href="#">Something else here</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">Separated link</a></li>
                        </ul>
                    </li>
                </ul>
            </div><!-- /.navbar-collapse -->
        </div><!-- /.container-fluid -->
    </nav>
    
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3">
                <div class="list-group">
                    <a href="/home/" class="list-group-item active">
                        男人的天堂
                    </a>
                    <a href="/reg/" class="list-group-item">注冊</a>
                    <a href="/login/" class="list-group-item">登錄</a>
                    <a href="#" class="list-group-item">開通會員</a>
                    <a href="#" class="list-group-item">視頻聊天</a>
                </div>
            </div>
            <div class="col-md-9">
                <div class="jumbotron">
                    <h1>Hello, world!</h1>
                    {% block content %}
                        <p>性感荷官 在線發牌哦</p>
                    {% endblock %}
    
                    <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
                </div>
            </div>
        </div>
    
    </div>
    {% block js %}
    
    {% endblock %}
    </body>
    </html>
    
    
    
    # 新建注冊頁面文件 reg.html:
    {% extends 'home.html' %}  {# 將home.html文件內所有代碼復制到當前文件 #}
    
    {% block css %}
        <style>
            .c1 {
                color: red;
            }
        </style>
    {% endblock %}
    
    {% block content %}
        <h1>注冊頁面</h1>
        <div class="c1">注冊有驚喜哦</div>
    {% endblock %}
    
    {% block js %}
        <script>
            alert(123)
        </script>
    {% endblock %}
        
        
    # 新建登錄頁面文件 login.html:
    {% extends 'home.html' %}  {# 將home.html文件內所有代碼復制到當前文件 #}
    
    {% block content %}
        <h1>登錄頁面</h1>
    {% endblock %}
        
    # 補充:
    	引入非完整的left.html文件 以登錄頁面文件為例:
        
    	登錄頁面文件 login.html:
    {% extends 'home.html' %}  {# 將home.html文件內所有代碼復制到當前文件 #}
    
    {% block content %}
        <h1>登錄頁面</h1>
        {% include 'left.html' %}
    {% endblock %}
        
    	left.html文件內容:
    <h2>這是left</h2>
    

    image

    image

    image

    3. 測試環境搭建

    # 在tests.py文件中添加:
    
    # 配置環境
    import os
    
    if __name__ == '__main__':
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', "mysite5.settings")
        import django
        django.setup()
        # 代碼都要寫在這個下面
        from app01 import models
    

    4. ORM查詢方法

    # 先django連接數據庫
    	修改settings.py配置文件:
    DATABASES = {
        # 'default': {
        #     'ENGINE': 'django.db.backends.sqlite3',
        #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        # }
    
        'default': {  # 添加該字典
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'day06',  # 庫名
            'HOST': '127.0.0.1',
            'POST': 3306,
            'USER': 'root',
            'PASSWORD': '123',
            'CHARSET': 'UTF8'
        }
    }
    
    
    # 通過models.py文件中創建表:
    class Book(models.Model):
        title = models.CharField(max_length=32)
        price = models.IntegerField()
        def __str__(self):
            return self.title
        
    # 在 tests.py操作數據庫 寫入:
    """
    # 配置環境
    import os
    
    if __name__ == '__main__':
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', "mysite5.settings")
        import django
        django.setup()
    
        # 代碼都要寫在這個下面
        from app01 import models
    
        # 創建表記錄
        # models.Book.objects.create(title='小澤瑪麗亞', price=100)
        # models.Book.objects.create(title='瀧澤蘿拉', price=150)
        # models.Book.objects.create(title='波多野結衣', price=500)
    
        # 1.all first()
        # res = models.Book.objects.all()
        # res1 = models.Book.objects.all().first()
        # res2 = models.Book.objects.all().last()
        # print(res)  # <QuerySet [<Book: 小澤瑪麗亞>, <Book: 瀧澤蘿拉>, <Book: 波多野結衣>]>
        # print(res1)  # 小澤瑪麗亞
        # print(res2)  # 波多野結衣
    
        # 2.get
        # res = models.Book.objects.filter()
        # res1 = models.Book.objects.filter(pk=1)
        # res2 = models.Book.objects.filter(pk=1).first()
        # # res3 = models.Book.objects.get(pk=5)  # 查詢的數據必須存在,不存在直接報錯
        # print(res)  # <QuerySet [<Book: 小澤瑪麗亞>, <Book: 瀧澤蘿拉>, <Book: 波多野結衣>]>
        # print(res1)  # <QuerySet [<Book: 小澤瑪麗亞>]>
        # print(res2)  # 小澤瑪麗亞
        # # print(res3)
        '''一般不推薦使用get方法'''
    
        # 3.exclude
        # res = models.Book.objects.exclude(pk=1)  # 查詢pk=1之外的數據,其實就是排除數據
        # print(res)  # <QuerySet [<Book: 瀧澤蘿拉>, <Book: 波多野結衣>]>
    
        # 4. order by
        # SQL語句寫法:select *from t1 order by id asc, price desc, title asc
        # res = models.Book.objects.order_by('id')  # 默認是升序
        # res1 = models.Book.objects.order_by('-id', 'price')  # 默認是降序  多字段排序:只有前一個字段一樣時 才會按下一個字段排序
        # print(res)  # <QuerySet [<Book: 小澤瑪麗亞>, <Book: 瀧澤蘿拉>, <Book: 波多野結衣>]>
        # print(res1)  # <QuerySet [<Book: 波多野結衣>, <Book: 瀧澤蘿拉>, <Book: 小澤瑪麗亞>]>
    
        # 5.反轉
        # res = models.Book.objects.order_by('id').reverse()  # 默認是降序
        # print(res)  # <QuerySet [<Book: 波多野結衣>, <Book: 瀧澤蘿拉>, <Book: 小澤瑪麗亞>]>
    
        # 6.count 查詢某個字段出現幾個
        # SQL語句寫法: select count(1) from t1
        # res = models.Book.objects.count()  # 查詢有幾個字段
        # res1 = models.Book.objects.filter(price=100).count()  # 查詢price為100的字段有幾個
        # print(res)  # 3
        # print(res1)  # 1
    
        # 7.exists 查詢是否存在
        # res = models.Book.objects.filter(pk=1).exists()
        # print(res)  # True
    
        # 8.values 按指定字段查詢
        # SQL語句寫法:select title, price from t1
        # res = models.Book.objects.values('title', 'price')  # 列表套字典
        # res1 = models.Book.objects.values_list('title', 'price')  # 列表套元組
        # print(res)  # <QuerySet [{'title': '小澤瑪麗亞', 'price': 100}, {'title': '瀧澤蘿拉', 'price': 150}, {'title': '波多野結衣', 'price': 500}]>
        # print(res1)  # <QuerySet [('小澤瑪麗亞', 100), ('瀧澤蘿拉', 150), ('波多野結衣', 500)]>
    
        # 9.去重:一定不加主鍵(因為主鍵不會重復)
        # SQL語句寫法: select distinct name from t1
        res = models.Book.objects.values('title', 'price').distinct()
        print(res)  # <QuerySet [{'title': '小澤瑪麗亞', 'price': 100}, {'title': '瀧澤蘿拉', 'price': 150}, {'title': '波多野結衣', 'price': 500}]>
    """
    

    image

    5. 基于雙下滑線的查詢

    # 在 tests.py操作數據庫 寫入:
    
    # 配置環境
    import os
    
    if __name__ == '__main__':
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', "mysite5.settings")
        import django
        django.setup()
    
        # 代碼都要寫在這個下面
        from app01 import models
        
        # 基于雙下滑線的查詢
        # 1. 查詢書籍價格大于200的
        # SQL語句寫法:select * from t1 where price > 200
        # ORM語句:gt => greater than equal
        # res = models.Book.objects.filter(price__gt=200).all()
        # res1 = models.Book.objects.filter(price__gte=200).all()
        # print(res)  # QuerySet [<Book: 波多野結衣>]>
        # print(res1)  # QuerySet [<Book: 波多野結衣>]>
    
        # 2. 查詢書籍價格小于200的
        # res = models.Book.objects.filter(price__lt=200).all()
        # res1 = models.Book.objects.filter(price__lte=200).all()
        # print(res)  # <QuerySet [<Book: 小澤瑪麗亞>, <Book: 瀧澤蘿拉>]>
        # print(res1)  # <QuerySet [<Book: 小澤瑪麗亞>, <Book: 瀧澤蘿拉>]>
    
        # 3. 查詢書籍價格是111 或 300的所有書籍
        # sql:select * from t1 where price = 111 or price = 200
        # sql:select * from t1 where price in (111, 200)
        # in走索引,not in 不走索引
        # res = models.Book.objects.filter(price__in=[111, 300]).all()
        # print(res)  # <QuerySet []>
    
        # 4. 查詢書籍價格在100-300之間的
        # sql:select * from t1 where price >= 100 and price <= 300
        # sql: select *from t1 where price between 100 and 300
        # 顧頭顧尾
        # res = models.Book.objects.filter(price__range=[100, 300]).all()
        # print(res)  # <QuerySet [<Book: 小澤瑪麗亞>, <Book: 瀧澤蘿拉>]>
    
        # 5. 查詢書籍名稱帶有 衣 的所有書籍
        # like查詢不走索引
        # es: elasticsearch
        # sql:select * from t1 where title like '衣%'
        # res = models.Book.objects.filter(title__contains='衣').all()
        # # 返回結果一定是queryset對象,才能點query屬性
        # print(res.query)  # 查看表字段
        # print(res)  # <QuerySet [<Book: 波多野結衣>]>
        """
        select book.id, book.title from t1
        create table db1.t (id int, name varchar(16))
        """
    
        # 6. 查詢以 波 開頭的數據  以 亞 結尾的數據
        # res = models.Book.objects.filter(title__startswith='波').all()
        # res1 = models.Book.objects.filter(title__endswith='亞').all()
        # print(res)  # <QuerySet [<Book: 波多野結衣>]>
        # print(res1)  # <QuerySet [<Book: 小澤瑪麗亞>]>
    
        # 7. 以時間查詢: 2021-10
        # res = models.Book.objects.filter(create_time__year=2021, create_time__month=10)
    

    6. 查看SQL執行語句

    # 1.如果當前對象是queryset那么可以直接點query查找該對象內部SQL語句
    
    # 2.在settings.py 配置文件(只要執行orm語句都會自動打印SQL語句)
    	LOGGING = {
            'version': 1,
            'disable_existing_loggers': False,
            'handlers': {
                'console':{
                    'level':'DEBUG',
                    'class':'logging.StreamHandler',
                },
            },
            'loggers': {
                'django.db.backends': {
                    'handlers': ['console'],
                    'propagate': True,
                    'level':'DEBUG',
                },
            }
    }
    

    image

    posted on 2022-03-02 21:14  Deity_JGX  閱讀(3)  評論(0編輯  收藏  舉報

    国产在线码观看超清无码视频,人妻精品动漫H无码,十大看黄台高清视频,国产在线无码视频一区二区三区,国产男女乱婬真视频免费,免费看女人的隐私超爽,狠狠色狠狠色综合久久蜜芽