zoukankan      html  css  js  c++  java
  • django基础

    ---------------https://www.cnblogs.com/yuanchenqi/articles/8875659.html

    一、python的web框架

      flask   ---   小项目

      django  ----   大项目

    二、django基础

      (1)、web服务的本质

          网络编程都是基于套接字socket编程,不分语言

            client   ----   server

            BS架构

            browser ------   server 

    import socket
    
    sock=socket.socket()
    sock.bind(("127.0.0.1",8800))
    sock.listen(5)
    
    while 1 :
    
        conn,addr=sock.accept()
        data=conn.recv(1024)
        print("data",data)
        with open('index.html',"rb") as f:
            html=f.read()
        conn.send(b'HTTP/1.1 200 OK
    
    %s'%html)
        conn.close()

      (2)、django的介绍,下载,实例

          下载pip install django

          创建项目  django-admin  start project mysite

          生成app    python manage.py  startapp  app01

              mysite 

                ----- mysite

                   -----  settings   项目配置文件

                    ------  urls    路径与视图函数的映射关系

                    -----   wsgi   封装的socket

                ------ manage.py     django项目进行交互的脚本

                ----- app01(项目应用)

                  -----models   数据库操作

                  -----views   视图函数

                -----templates  

                    login.html

      (3)、MTV(MVC)

          M  models :负责业务对象和数据库的关系映射(ORM)

          T  Template :   负责如何 把页面展示给用户(HTML)

          V  views   :  负责业务逻辑,并在适当时候调用Model 和 Template

      (4)、URL

        url:  协议://IP(域名):端口(80)/路径/?GET参数

              https://www.jd.com/

              https://127.0.0.1:8000/books/1/?x=123

        功能:url的路径和视图函数的映射关系

          url的简单应用

    from django.conf.urls import url,include
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # url(r'^articles/2003/$', views.special_case_2003), # special_case_2003(request)
        # url(r'^articles/(d{4})/$', views.article_year),   # article_year(request,2004)
        # # url(r'^articles/(d{4})/(d{2})$', views.article_yearmonth),   # article_year(request,2004,12)
        # # 有名分组
        # url(r'^articles/(?P<year>d{4})/(?P<month>d{2})$', views.article_yearmonth2),  # article_year(request,year=2004,month=12)
    
        # 分发
        url(r'^app01/', include('app01.urls')),
    
        # 反射
        url(r'^login/', views.login,name="xxxxxx")
    
    ]
    '''
    import re
    
    re.findall("规则","待匹配字符串")
    
    ret=re.findall("^articles/2003/$","该请求的url的路径")
    if ret:
         views.special_case_2003(request)
    
    '''

          url的有名分组

          url的分发

          url的反射

            在有时需要改变url名称的时候,采用别名方便修改

     # 反射
        url(r'^login/', views.login,name="xxxxxx")
    
    HTML
    
        <form   action="{% url  'xxxxxx'  %}"   method="post">
                    ...
                    ...
        </form>

      (5)、View

    ------------https://www.cnblogs.com/yuanchenqi/articles/7629939.html

          1、render的方法功能

            return render(request,“login.html”)

                  按着settings指定路径找到对应的login.html,读取文件内容,构建   return  HttpsResponse(文件字符串)

            return render(request,“login.html”,{"name":wudi})

                  按着setting指定路径找到对应的login.html,读取文件内容,进行渲染,把文件字符串中所有{{}}的内容按着,{"name":wudi}替换,将新的替换字符串                                              建 HttpResponse(新的文件字符串)

          2、print(request.GET)

            print(request.POST)

            print(request.method)

            print(request.path)

            print(request.get_full_path)

                django必须响应一个HttpResponse对象

                  HttpResponse:响应字符串

                  render: 响应模板

                  redirect: 重定向

      (6)、Template

        模板语法

           1、变量

            1、1深度查询:    使用句点符号

    views:
           1、L1 = [11,22,33]
           2、L2 = {'name':name,'age':age'}
           3class Person(object):
                    def __init__(self,name,age):
                            self.name = name
                            self.age = age
                agon = Person('egon',18)
                alex = Person('alex',22)
                L3 = [egon,alex]
    
     templates
        1、{{L1.1}}
        2、{{L2.name}}
        3、{{L3.1.name}}
            {{L3.1.name.2}} 字符串也可以深度查询到

                return render(request,'index.html',{'name':name..........................})换成 return render(request,'index.html',locals())

              locals()可以帮函数下的所有变量上传到templates,测试用,开发尽量少用

           1、2  过滤器

            格式:  {{val|fileter_name:参数}}

    templates:
        
        {{count|add:20}}
        {{time|date:'Y:m:d h:i'}}
        {{t1|default:"不存在值"}}
        {{a|safe}}     浏览器对标签默认转义,加上safe后则不转义
        {{str|slice:"0:2"}}
        {{p|truncatechars:200}}
        {{a|truncatewords:2}}

           2、标签

            for 

                  if

    {% for i in nums %}
    <p> {{i}}  </p>
    {% endfor %
    ----------------------------forloop.counter------------
    <ul>
    {% for i in nums %}
    <li> {{ forloop.counter }}{{i}}  </li>
    {% endfor %
    </ul>
    -----------------------------items ------------------
    <ul>
    {% for k,v in nums.items %}
    <li> {{ k }}----{{v }}  </li>
    {% endfor %
    </ul>
    ------------------------------------------------------
    .. {{forloop.counter0}}、 {{forloop.first}}判断是否为第一个,是则为True、 {{forloop.last}}

      if和for连用的语法

    {% for k in nums%}
         {% if k > 0%}
           <p>{{ k }}</p>
         {% endif  %}
    {% endfor %}    
    

       (7)、静态文件的配置

         在settings文件里配置

          项目部署之后,ningx作为静态文件的主载栈,最后放在apachix和ningx上去

    settings.py
         别名
          STATIC_URL = '/static/'
        文件实际存在目录
          STATICFILES_DIRS = [os.path.join(BAES_PATH,"static"),]  
    引用网上jquery的CDN服务器:bootcdn比较稳定
    <script src=""></script>
    <h4 class="btn">深度查询</h4>
    <div class="con">
        <h6>sds</h6>
        <h6>sds</h6>
        <h6>sds</h6>
    </div>
        <script>
            $('btn').click(function () {
                $('.con').toggle()
            })
            
        </script>

      (8)、继承

        

    shopper.html:
    {% extends "login.html" %}
        
      {% block content %}
        <p>hahh</p>
       {%  endblock content %}   
    base.html:
         {% block content %}
            <p>hahh</p>
        {%  endblock content %}
    -----------------------------super--------------------
    shopper.html:
         {% block content %}
            <p>hahh</p>
        <div> {{ block.super }} </div>  -----合并父类的div,不覆盖  {% endblock content %}

            (9)、a标签的功能

    <div><a href="/login/">点我</a></div>

      (10)、ORM(单表操作)

        python manage.py makemigrations

        python manage.py migrate

    1、数据库配置
    
    # Database
    # https://docs.djangoproject.com/en/1.11/ref/settings/#databases
    
    # DATABASES = {
    #     'default': {
    #         'ENGINE': 'django.db.backends.sqlite3',
    #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #     }
    # }
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'s1orm', # 要连接的数据库,连接前需要创建好
            'USER':'root', # 连接数据库的用户名
            'PASSWORD':'123', # 连接数据库的密码
            'HOST':'127.0.0.1',       # 连接主机,默认本级
            'PORT':3306#  端口 默认3306
        }
    }
    
    init.py:
    
        import pymysql
        
        pymysql.install_as_MySQLdb()
    
    urls.py:
        from django.conf.urls import url
        from django.contrib import admin
    
    
    views.py:
    
      # 添加数据
        # Book.objects.create(title="linux",pub_date="2012-12-12",price=122,publish="人民出版社")
    
        # 查看所有书籍
        # book_list=Book.objects.all() # [obj1,obj2,obj3]
        # for book in book_list:
        #     print(book.title)
    
        # 删除
        Book.objects.filter(id=1,title="python").delete()
    
    models.py:
    
        from django.db import models
        # Create your models here.
    class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) pub_date = models.DateField() price = models.DecimalField(max_digits=8, decimal_places=2) publish = models.CharField(max_length=32)

    书籍管理小型项目

    urls.py
    
    from django.conf.urls import url
    from django.contrib import admin
    
    from book import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^addbook/$', views.addbook),
        url(r'^books/$', views.books),
        url(r'^books/delete/(?P<id>d+)/$', views.deletebooks),
    ]
    models.py
    
    from django.db import models
    
    # Create your models here.
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        pub_date = models.DateField()
        price = models.DecimalField(max_digits=8, decimal_places=2)
        publish = models.CharField(max_length=32)
    views.py
    from django.shortcuts import render,HttpResponse,redirect
    
    # Create your views here.
    
    from book.models import Book
    
    def addbook(request):
        if request.method=="GET":
              return render(request,"addbook.html")
        else:
            title=request.POST.get("title")
            price=request.POST.get("price")
            pub_date=request.POST.get("pub_date")
            publish=request.POST.get("publish")
    
            Book.objects.create(title=title,
                                publish=publish,
                                price=price,
                                pub_date=pub_date)
    
    
            return redirect("/books/")
    
    def books(request):
    
        book_list=Book.objects.all()
        
        return render(request,'books.html',{"book_list":book_list})
    
    
    def deletebooks(request,id):
    
        Book.objects.filter(id=id).delete()
        Book.objects.filter(id=id).update(titile="123")
    
        return redirect("/books/")
    

      

    addbook.html:
    
    <form action="/addbook/" method="post">
        <p>书籍名称 <input type="text" name="title"></p>
        <p>价格  <input type="text" name="price"></p>
        <p>出版日期 <input type="date" name="pub_date"></p>
        <p>出版社 <input type="text" name="publish"></p>
        <input type="submit">
    
    </form>
    
    books.html:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
    
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    </head>
    <body>
    <h3>图书列表</h3>
    
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <div>
                    <a href="/addbook/">添加书籍</a>
                    <table class="table table-bordered table-striped table-hover">
                        <thead>
                              <tr>
                                  <th>序号</th>
                                  <th>书籍名称</th>
                                  <th>价格</th>
                                  <th>日期</th>
                                  <th>出版社</th>
                                  <th>操作</th>
                              </tr>
                        </thead>
                        <tbody>
                              {% for book in book_list %}
                              <tr>
                                 <td>{{ forloop.counter }}</td>
                                 <td>{{ book.title }}</td>
                                 <td>{{ book.price }}</td>
                                 <td>{{ book.pub_date }}</td>
                                 <td>{{ book.publish }}</td>
                              <td>
                                   <a href="/books/delete/{{ book.id }}" class="btn-sm btn-danger">删除</a>
                              </td>
                              </tr>
                              {% endfor %}
    
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
    
    
    </body>
    </html>

    三、django  重点

      (1)、ORM多表操作

      (2)、Django组件:

            forms组件

            cookie与session

            中间件

            Ajax($.ajax())

  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/di2wu/p/10051891.html
Copyright © 2011-2022 走看看