zoukankan      html  css  js  c++  java
  • 人生苦短,我用python-- Day18 正则+组件+django框架

    目录                          

    1.正则表达式

    2.组件

    3.django框架

    一、正则表达式                               

    作用:1,判断字符串是否符合规定的正则表达式  ----test

       2,获取匹配的数据   exec

      用户登录的时候 常常需要用到正则进行匹配用户输入的是否符合要求:

    实验案例一:判断字符串是否符合定义的正则表达式要求

     exec 使用方法:

    rep = /d+/;  定义一个正则表达式,匹配数字
    str = "DongGuang_061600_BeiJing_10000"  定义一个字符串
    rep.exec(str)  使用rep正则表达式匹配str这个字符串中符合的数据
    # ["67"]    结果明显看出,使用这种方式,无论执行几次都是获取第一个数据
    str = 'JavaScript is more fun than Java or JavaBeans!'  定义一个字符串
    var pattern = /Javaw*/;    定义一个正则规则,w的意思是陪陪一Java开头的一个单词
    pattern.exec(str)
    ["JavaScript"]
    str = 'JavaScript is more fun than Java or JavaBeans!'  定义一个字符串
    var pattern = /Java(w*)/;  定义一个正则规则,这里把上面的w*括起来的其意思是,当获取到第一次匹配后,会把结果再次进行匹配,把第一次匹配的内容去除
                       剩余的内容当做第二次匹配的结果 pattern.exec(str) [
    "JavaScript", "Script"]

    全局匹配

    关键参数g

    str = 'JavaScript is more fun than Java or JavaBeans!'  定义一个字符串
    var pattern = /Java(w*)/g;  定义一个正则规则,在上一个的基础上加了一个g,意思是当每次执行这个正则的时候,都会筛选下一个选择,当执行到最后一个,没有匹配到结果为null
    pattern.exec(str)
    ["JavaScript", "Script"]
    pattern.exec(str)
    ["Java", ""]
    pattern.exec(str)
    ["JavaBeans", "Beans"]
    pattern.exec(str)
    null

    多行匹配

    关键参数 m

    str = 'JavaScript is more fun than 
    Java or JavaBeans!'   #定义一个字符串,其中有一个换行符号
    "JavaScript is more fun than 
    Java or JavaBeans!"
    var pattern = /^Javaw*/g;   #定义一个正则表达式,全局匹配开头为Java的单词
    undefined
    pattern.exec(str) #第一次匹配结果
    ["JavaScript"]
    pattern.exec(str) #第二次匹配结果
    null
    pattern.exec(str)  #第三次匹配结果
    ["JavaScript"]
    pattern.exec(str)  #第四次匹配结果
    null
    var pattern = /^Javaw/gm;  #定义一个正则表达式,全局多行匹配开头为Java,
    undefined
    pattern.exec(str)
    ["JavaScript"]
    pattern.exec(str)
    ["Java"]

    不区分大小写匹配

    关键参数 i

    响应式:

    响应式html编程大概意思是当浏览器的宽度到达某个程度的时候,css中的某个样式生效

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: red;
            }
            /*c1这个div最小像素是500,当宽度小于500px的时候,此样式不生效*/
            @media (min- 500px) {
                .c1{
                    background-color: green;
                }
            }
        </style>
    </head>
    <body style="margin: auto">
        <div class="c1">
            1
        </div>
    </body>
    </html>

    三、django框架的安装及使用                        

       1.django安装

        pip3 install django

      2.创建一个工程

        django-admin startproject  management_system

        django-admin startproject  项目名称

      3.启动工程

        cd management_system  # 进入到项目目录

        python3 manage.py runserver  #启动项目

        如果不指定端口默认启动端口为127.0.0.1:8000端口

        也可以指定端口

        python3 manage.py runserver 127.0.0.1:8001

      4.web访问

             

      5.目录介绍

        -management_system  项目名称

          |--management_system   #对整个程序进行配置

            -__init__.py

            -settings.py   # 配置文件,配置数据库连接、模板连接等等

            -urls.py # URL和函数对应关系,当用户来访问程序的是,就会根据url进行匹配

            -wsgi.py # 首先wsgi是一套规则,django是一个web框架不负责给我创建socket连接,所以这里调用wsgi模块进行socket的创建,我们代码只需

                  要进行编写函数,处理wsgi传过来的数据就可以了。

          -manage.py  # 管理django程序的:

                  1.python manage.py runserver 启动django

                  2.python manage.py startapp APP名称  创建app程序(可以理解为子模块)

                  3.python manage.py makemigrations 

                   python manage.py mingrate  通过这两个命令可以连接数据库,创建表

      6.创建工程pycharm也可以帮我们创建,这样创建和我们使用命令创建是一个效果

      7.写一个测试页面的html,http://127.0.0.1:8000/test.html

    """management_system URL Configuration
    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/1.10/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.conf.urls import url, include
        2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
    """
    from django.conf.urls import url
    from django.contrib import admin
    from django.shortcuts import HttpResponse
    
    def test(request):
        return HttpResponse('<h1>This is a test pag!</h1>')
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^test.html/', test),
    ]
    urls.py

    效果:

      

      8.创建一个app

      当写一个网站的时候,往往会有很多模块,上面的app其实就是模块的概念,看下图:

            

    当我写一个运维平台的是,可能会有这么的模块,那么每个模块我们叫做一个app,这样就实现了代码分离,数据库共享的效果!

      win下面创建app没有什么好的办法,需要我们使用命令:

        python manage.py startapp APP名称

      mac下面创建app有一个快捷键,option+r,然后直接输入startapp  APP名称

                 

     9.app目录介绍

      APP目录

       |--migrations  数据库操作记录目录

       --__init__.py     

         --admin.py  #django后台管理配置

       --apps.py  # 配置当前app

         --models.py # django后台管理数据库表管理文件,创建指定的类,models可以创建表结构

             --tests.py   # 单元测试

             --views.py  # 写和当前app相关的所有业务代码

     10.django的html模板目录的配置

      依次找到:工程目录-->settings.py文件 修改TEMPLATES列表中的DIRS对应的值为“[os.path.join(BASE_DIR,'创建的模板目录名字')]”

     11.django的静态文件目录的配置

      依次找到:工程目录-->settings.py文件 最后面增加STATUICFILES_DIRS ,切记最后一定要逗号

    STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static'),
    )

     12. django返回数据的时候如果返回一个html的时候,我们的想法是,打开一个html读出数据来,把整个数据返回给客户端,但是这种模式假如有好多访问需要不断

          的我们来打开文件,这样很麻烦;django后来给我们封装了一个方法我们引入render这个方法进行返回就行了,其实他内部也是打开返回这么操作的。

    from django.shortcuts import render

          假如我们要重定向到另外一个网站的时候:就需要引入我redirect这个方法进行返回

    from django.shortcuts import redirect

     我们来梳理一下一个请求过来大致的流程:

    说一个html里面嵌套关键字的方法使用大括号:

    在这个body标签中有一个{{error_msg}}的关键字,这个error_msg是自己定义的,但是两个大括号是固定格式,当要把这个html返回给浏览器的时候django自己会先把html解析一遍(说白了就是把一些关键字替换一遍);那么替换成什么呢?

     可以看到如果跳转失败了,那么后台会定义一变量error_msg = ‘用户名密码错误’,然后return 一个html,并且会把这个error_msg当做一个值传过去。然后django就会在html进行替换前面定义的关键字了

    模板循环:

    返回的参数

    USER_LIST = [
        {'username':'alex','email':'alex3714@163.com','gender':''},
        {'username':'eriuc','email':'yinjiao@163.com','gender':''},
        {'username':'tom','email':'tom@163.com','gender':''},
    return render(request, 'home.html', {'user_list': USER_LIST})

    html模板拿到user_list数据后,进行循环,每个row是一个字典,模板语言拿字典中的数据的时候,用点进行拿

    {% for row in user_list %}
                    <tr>
                        <td>{{ row.username }}</td>
                        <td>{{ row.gender }}</td>
                        <td>{{ row.email }}</td>
                    </tr>
                {% endfor %}

    本节django使用的的代码案例:

    """onedjango URL Configuration
    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/1.10/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.conf.urls import url, include
        2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
    """
    from django.conf.urls import url
    from django.contrib import admin
    from cmdb import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^cmdb.html/', views.Cmdb),
        url(r'^login.html', views.login),
        url(r'^home.html/', views.home),
    ]
    urls.py
    from django.shortcuts import render
    
    # Create your views here.
    from django.shortcuts import HttpResponse
    from django.shortcuts import render
    from django.shortcuts import redirect
    
    def Cmdb(request):
        return HttpResponse('<h1>CMDB</h1>')
    
    def login(request):
        error_msg = ""
        if request.method == 'POST':
            user = request.POST.get('user',None)
            pwd = request.POST.get('pwd',None)
            if user == 'root' and pwd == '123':
                return redirect('http://www.baidu.com')
            else:
                error_msg = '用户名密码错误'
        return render(request,'login.html',{'error_msg':error_msg})
    
    
    USER_LIST = [
        {'username':'alex','email':'alex3714@163.com','gender':''},
        {'username':'eriuc','email':'yinjiao@163.com','gender':''},
        {'username':'tom','email':'tom@163.com','gender':''},
    ]
    
    def home(request):
        print(request.method)
        if request.method == "POST":
            print('aaa')
            # 获取用户提交的数据
            u = request.POST.get('username')
            e = request.POST.get('email')
            g = request.POST.get('gender')
            tmp ={'username': u, 'gender':  g,'email': e}
            print(tmp)
            USER_LIST.append(tmp)
            print(USER_LIST)
        return render(request, 'home.html', {'user_list': USER_LIST})
    views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body style="margin: 0">
        <div style="height: 48px;background-color: #dddddd"></div>
        <div>
            <form action="/home.html/" method="post">
                <input type="text" name="username" placeholder="用户名" />
                <input type="text" name="email"  placeholder="邮箱"/>
                <input type="text" name="gender"  placeholder="性别"/>
                <input type="submit" value="添加" />
            </form>
        </div>
        <div>
            <table>
                {% for row in user_list %}
                    <tr>
                        <td>{{ row.username }}</td>
                        <td>{{ row.gender }}</td>
                        <td>{{ row.email }}</td>
                    </tr>
                {% endfor %}
    
            </table>
        </div>
    </body>
    </html>
    templates.home.html
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <link rel="stylesheet" href="/static/commons.css">
     7     <style>
     8         label{
     9             width: 80px;
    10             text-align: right;
    11             display: inline-block;
    12         }
    13     </style>
    14 </head>
    15 <body>
    16     <form action="/login.html" method="post">
    17         <p>
    18             <label for="username">用户名:</label>
    19             <input id="username" type="text" name="user"/>
    20         </p>
    21         <p>
    22             <label for="password">密码:</label>
    23             <input id="password" type="password" name="pwd"/>
    24             <input type="submit" value="提交" />
    25             <span style="color: red;">{{ error_msg }}</span>
    26         </p>
    27     </form>
    28 </body>
    29 </html>
    templates.login.html

      

  • 相关阅读:
    使用grpc C++功能
    华为任正非访谈
    苹果产品
    异步编程
    基于磁盘存储
    spring 应用
    java简单框架设计
    消息队列架构
    03 java 基础:注释 关键字 标识符 JShell
    02 java 基础:java 文件名与类名关系 CLASSPATH
  • 原文地址:https://www.cnblogs.com/xinzhiyu/p/6141086.html
Copyright © 2011-2022 走看看