zoukankan      html  css  js  c++  java
  • Python学习笔记Day18

    快速开发组件

    BootStrap (***最精美,模板多nifty)

    - css
    - js
    
    学习 BootStrap 规则
    
    一、响应式
        @media (min-900px){
            .c2{}
        }
    
    二、图标、字体
        @font-face 指定图标字体文件
        使用时使用代号
    
    三、基本使用
        导入js
        导入bootstrap
        css:{
            color:red !important;       #加!important表示不管先后顺序,一定会应用
        }
        bxslider轮播图,引用它的css和js,
    
    ========> 偏于后台管理
    

    jQueryUI (*略推荐)

    - css
    - js
    
    学习 jQueryUI 规则
    

    EasyUI

    - css
    - js
    
    在官网下easyUI包,查demo,复制源码,更改css,js链接
    easyUI的源码和html代码不一致,不方便修改,不推荐
    

    WEB框架

    本质是socket

    MVC:对文件夹分类
        Model     View       Controller
        数据库   模板文件    业务处理(函数)
    
    MTV:
        Model    Template     View
        数据库   模板文件    业务处理
    

    MVC、MTV,只是文件夹命名不同

    Django

    ==用python开发web最齐全的框架=

    基于MTV框架

    http://www.cnblogs.com/wupeiqi/articles/5237704.html

    1. 创建Django工程

    • 执行终端命令

        django-admin startproject 【工程名称】
      

      也可从Pycharm等IDE创建,不用重复此步骤,本质上都是自动执行上述命令

    • 其他常用命令:

        python manage.py runserver 0.0.0.0
        python manage.py startapp appname
        python manage.py syncdb
        python manage.py makemigrations
        python manage.py migrate
        python manage.py createsuperuser
      
    • 程序目录:

        【工程文件夹】
            - 【同名子文件夹】        # 对整个程序进行配置
                - init
                - settings  # 配置文件
                - wsgi      # 遵循WSIG规范,创建socket,uwsgi + nginx
                - url       # URL对应关系
                        def hello(request):
                            return HttpResponse('<div>hello</div>')
                        urlpatterns = [
                            path('s1/',hello)
                        ]
            - manage.py     # 管理Django程序:ORM对象
                                - python manage.py
                                - python manage.py startapp xx
                                - python manage.py makemigrations
                                - python manage.py migrate
      

    2. 运行Django功能

    python manage.py runserver 127.0.0.1:8001
    

    3. 创建app文件夹

    • 配置文件夹

        cd 工程名
        python manage.py startapp xxxx....
      
    • app目录:

        migrations     数据修改表结构,每次表结构修改都会记录在一个文件中
        admin          Django为我们提供的后台管理功能(包括登录、权限管理、分组、搜索)
        apps           配置当前app
        models         ORM,写指定的类  通过命令可以创建数据库结构
        tests          单元测试
        views    ***   业务代码
      

    4. 配置模板的路径

    放置html,一般已自动创建        /./settings   
        TEMPLATES = [{
                    'DIRS': [os.path.join(BASE_DIR, 'templates')],
                },]
    

    5. 创建并配置静态目录

    • 创建/static,放置css,js,image等静态文件

        /./settings
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR, 'static'),   # 不加逗号会报错
        )
      
    • 在html中导入css,js

        <link rel="stylesheet" href="/static/commons.css" />
      

    6. 跨站请求伪造csrf禁用 (正式项目不需此步,但要在html中声明csrf_token)

    /./settings
    middlerware     # 注释 csrf
    
    # 'django.middleware.csrf.CsrfViewMiddleware',
    

    7. 定义路由规则url

    /./url.py
    1. 要在url里导入app 
    2. path('home/',views.home),
        - url里可不加/,但要与引用处保持一致。
        - 建议加上,访问时没有则自动加/
    
    • Django生命周期:

        用户请求 ->> 路由 ->> 视图函数 ->> templates(html)、static(js,css)
                    url.py   app.views.py
      

    8. 定义视图函数views

    /app/views.py
        def func(request):
            request.method   GET / POST (大写)
    
        ========== GET 获取数据===========
            http://127.0.0.1:8009/home?nid=123&name=alex 
            request.GET.get('',None)   # 获取请求发来的数据,没有则返回none
    
        ========== POST 提交数据==========
            request.POST 包含用户提交的数据字典,以name字段为key
            request.POST.get('')
    
        ======== 返回数据 ========
            return HttpResponse('<div>hello</div>')   # 直接返回字符串,可解析成页面
            return render(request, "HTML模板的路径",{'形参': 实参})  # 获取html文件返回
            return redirect('只能填URL')              # 重定向
                - 也可填本地url:'/home'     前面的/代表本地的url前缀
    

    9. 模板渲染

    • Django中特殊的模板语言

    • {{ 变量名 }}

        视图函数返回数据时将{{}}替换为相应的值
        return render(request, "index.html", {
                    'current_user': "alex",
                    'user_list': ['alex','eric']
                    'user_dict': {'k1': 'v1', 'k2': 'v2'}
                    })
        <html>
            <body>
                <div>{{current_user}}</div>
            </body>
        </html>
      
    • For循环

        {% for row in user_list %}
                <li>{{ row }}</li>
        {% endfor %}
      
        - 获取key
            {% for row in k2.keys %}
        - 获取value
            {% for row in k2.values %}
        - 获取key和value
            {% for k,v in k2.items %}
        - for循环里获取当前循环次数
            forloop.counter 索引,从 1 开始算
            forloop.counter0    索引,从 0 开始算
            forloop.revcounter  索引,从最大长度到 1
            forloop.revcounter0 索引,从最大长度到 0
            forloop.first   当遍历的元素为第一项时为真
            forloop.last    当遍历的元素为最后一项时为真
            forloop.parentloop.xxx  用在嵌套的 for 循环中,获取上层循环的 forloop
      
    • 用 "索引" 取列表(0)或字典(key)里的值

        <a> {{ user_list.0 }} </a>
        <a> {{ user_dict.k1 }} </a>
      
    • if条件判断

        {% if age %}
            <a>有年龄</a>
            {% if age > 16 %}
                <a>老男人</a>
            {% elif age < 3 %}
                ...
            {% else %}
                <a>小鲜肉</a>
            {% endif %}
        {% else %}
            <a>无年龄</a>
        {% endif %}
      
        ==, !=, >=, <=, >, < 
        and, or, not, in, not in 
        {%if value is None %}
      
    • 获取当前用户:

        {{ request.user }}
      
    • 如果登陆就显示内容,不登陆就不显示内容:

        {% if request.user.is_authenticated %}
            {{ request.user.username }},您好!
        {% else %}
            请登陆,这里放登陆链接
        {% endif %}
      
    • 获取当前网址:

        {{ request.path }}
      
    • 获取当前 GET 参数:

        {{ request.GET.urlencode }}     # keywords=131;time_filter=True
      
    • 获取referer

        request.META['HTTP_REFERER']
      

    作业

    XXXX管理:

    SQLAlchemy

    • 主机管理表(8列):

        IP
        端口
        业务线
        ...
      
    • 用户表:

        用户名
        密码
      
    • 功能:

        1、登录
        2、主机管理页面
            - 查看所有的主机信息(4列)
            - 增加主机信息(8列) ** 模态对话框
        3、查看详细
            url:
                "detail" -> detail
      
            def detail(reqeust):
                nid = request.GET.get("nid")
                v = select * from tb where id = nid
                ...
        4、删除
            del_host -> delete_host
      
            def delete_host(request):
                nid = request.POST.get('nid')
                delete from tb where id = nid
                return redirect('/home')
      

    博客

    • KindEditor

      • beautifulsoup4对标签进行过滤
      • 单例模式
    • 事务操作

      • from django.db import transaction
    • 筛选条件

      • 利用数据库内置函数实现筛选

    作业:

    - 示例
    - 评论和点赞
    
    pip3 install beautifulsoup4
    

    问题

    1. table文字不换行

    - 给相应td添加 white-space:nowrap; 这个属性是设置文字强制不换行
    - 或者在td内添加div标签,默认不换行
    

    2. 设置STATIC_URL, STATICFILES_DIRS, STATIC_ROOT的区别

    • STATIC_URL='/static/'

      这个static 是在Django 具体APP下建立的static目录,用来存放静态资源。

    • STATIC_ROOT = os.path.join(BASE_DIR, 'collect_static') # BASE_DIR 是项目的绝对地址

      STATIC_ROOT 是在部署静态文件时(pyhtonmanage.pycollectstatic)所有的静态文静聚合的目录,STATIC_ROOT要写成绝对地址
      STATIC_ROOT 是在部署的时候才发挥作用,django会把所有的static文件都复制到STATIC_ROOT文件夹下

    • STATICFILES_DIRS=(os.path.join(BASE_DIR, "common_static"),) # 不加逗号会报错

      STATICFILES_DIRS 一般用来设置通用的静态资源,对应的目录不放在APP下,而是放在Project下,且非必须.
      STATICFILES_DIRS告诉django,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找
      (注意, django查找静态文件是惰性查找,查找到第一个,就停止查找了)

    具体在模板文件中访问的时候,都是统一用:/static/资源名的方式,就可以访问到资源
    不论具体的目录是APP下的static,还是project下的common_static, 都可以用/static/资源名的方式访问到。

    为增强可移植性,在模板中可以用:STATIC_URL来代替具体的/static/来设置资源路径,但是需要在settings.py中2个地方进行设置,否则会发生取不到资源的错误:

    INSTALLED_APPS 中,加入 'django.contrib.staticfiles'
    TEMPLATES 中,context_processors中,加入django.template.context_processors.static
    

    模板中调用时:

    <img src="{{STATIC_URL}}pic.jpg " />
    

    https://blog.csdn.net/jj546630576/article/details/78606531

    3. 在Django中完整地删除一个App

    1. 删除models.py

      无论是删除一个单独的model还是删除整个App,都需要首先删除models.py文件中的模型。

      确认没有其他文件引用models.py中的类。

      迁移或者删除你的数据库,Django提供了简便的方法方便用户删除某App下的所有数据(Django 1.7)。

      python manage.py migrate app1 zero

      删除models.py中的数据模型。

    2. 删除App

      再次确认其他App中没有引用此App的文件

      删除整个App文件夹

      在settings.py的Installed Apps中移除该app。

    4. 修改完数据后可直接用redirect刷新页面(属于get方式),比用render再传一次参数要方便

    组合搜索

    1. 利用url传参给views里的kwargs,利用models.XX.filter筛选id

    2. 将当前kwargs传给模板,获取当前url,达成组合搜索

    3. 利用simpletag写小模板,将判断代码写在后台.py文件中

  • 相关阅读:
    mvcAPI (入门 2)
    mvcAPI (入门 1)
    IMetadataAware接口的特性定制Model元数据
    MVC 中DropDownList 用法
    MVC 中使用EF
    EF中限制字段显示长度
    EF 存储过程
    sql通用分页自定义表条件存储过程
    fffffffffff
    游标分页
  • 原文地址:https://www.cnblogs.com/JeromeLong/p/13246531.html
Copyright © 2011-2022 走看看