Python-day18

1.js正则表达式

1.1 test 匹配字符串是否符合规定的正则
1.2 exec 获取匹配的数据
rep = /^\d+$/
/^\d+$/
rep.test('12312312312321')
true
rep.test('12312312312321asfasfas')
false

注:简单匹配

2.全局匹配g

javastr = "javaasda 1231 31231 java javasctipt"
"javaasda 1231 31231 java javasctipt"
patten = /\bjava\w*\b/g
/\bjava\w*\b/g
patten.exec(javastr)
["javaasda", index: 0, input: "javaasda 1231 31231 java javasctipt"]
patten.exec(javastr)
["java", index: 20, input: "javaasda 1231 31231 java javasctipt"]
patten.exec(javastr)
["javasctipt", index: 25, input: "javaasda 1231 31231 java javasctipt"]
patten.exec(javastr)
null

3.web框架

解:所有的web站点或者web请求本质就是socket,不管服务器端是apache,或者tomcat或者nginx等等;运行起来就是socket server,浏览器充当客户端,http是无状态的服务
#!/usr/bin/env python
# this is Charlie scripts!
import socket
def handle_request(client):
    buf = client.recv(1024)
    client.send("HTTP/1.1 200 OK\r\n\r\n")
    client.send("Hello,Seven")
def main():
    sock = socket.socket()
    sock.bind(('127.0.0.1',8000))
    sock.listen(5)
    while True:
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()
if __name__ == "__main__":
    main()

注:所有的web框架的本质就是以上的代码

4.python分装socketserver

#!/usr/bin/env python


from wsgiref.simple_server import make_server


def RunServer(environ,start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    return '<h1>Hello,web!</h1>'

if __name__ == "__main__":
    httpd = make_server('',8000,RunServer)
    print "Serving HTTP on port 8000..."
    httpd.serve_forever()

注:不需要字节写socketserver,只要有客户请求自动触发runserver方法

5.python3写法

#!/usr/bin/env python3


from wsgiref.simple_server import make_server

# tasklist | findstr "8000"
# tskill pidnum

def RunServer(environ,start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    return ['<h1>Hello,web!</h1>'.encode("utf-8")]

if __name__ == "__main__":
    httpd = make_server('',8001,RunServer)
    print("Serving HTTP on port 8001...")
    httpd.serve_forever()

6.django创建初始项目

PS D:\> django-admin.exe startproject mysite
PS D:\mysite> python.exe .\manage.py runserver <127.0.0.1:8001>

注:如果需要针对django项目文件修改就要暂停服务重新开启

7.修改url配置文件

"""laoniu URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/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 xiaoniu import s1

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', s1.index),
]

8.新添加s1站点文件

#!/usr/bin/env python3

from django.shortcuts import HttpResponse

def index(request):
    return HttpResponse("身高一米八")

注:通过测试可以得知,django内部启动了socketserver,一旦有用户访问8001/index,那么django就会返回函数作为结果给客户端

9.项目结构

PS D:\laoniu\laoniu> dir


    目录: D:\laoniu\laoniu


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2017/12/22     11:55                __pycache__
-a----       2017/12/22     10:51           3216 settings.py
-a----       2017/12/22     11:55            834 urls.py
-a----       2017/12/22     10:51            406 wsgi.py
-a----       2017/12/22     10:51              0 __init__.py

注:django不负责写socketserver功能,django是依赖wsgi去创建socket的;wsgi其实是一套规则,一套接口,如果按照规则写,就可以达到socketserver的功能,而此处django内部就是用的wsgi_ref实现socket功能,而我们写程序不会用默认的wsgi,而是用uwsgi+nginx去跑程序

10.创建app

PS C:\Users\11025\PycharmProjects\s14django> python.exe .\manage.py startapp cmdb

注:注意,和功能目录是同一个目录级,不要弄错了

11.APP目录结构

PS C:\Users\11025\PycharmProjects\s14django\cmdb> dir


    目录: C:\Users\11025\PycharmProjects\s14django\cmdb


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2017/12/22     16:28                migrations
d-----       2017/12/22     16:32                __pycache__
-a----       2017/12/22     16:28             66 admin.py
-a----       2017/12/22     16:28             88 apps.py
-a----       2017/12/22     16:28             60 models.py
-a----       2017/12/22     16:28             63 tests.py
-a----       2017/12/22     16:32            171 views.py
-a----       2017/12/22     16:28              0 __init__.py

注:migrations保存的是修改数据库表结构的记录

12.Django内容整理

1.创建工程名:
django-admin startproject 工程名
2.创建APP(或多个)
cd 工程名
python mamage.py startapp cmdb
3.静态文件
project.settings.py

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,"static"),
)
4.模板路径
DIRS ==> [os.path.join(BASE_DIR,'templates'),]
5.settings中
middleware
    # csrf
6.定义路由规则
url.py文件
    "login" --> 
7.定于视图函数
    app下views.py文件
    def func(request):
        #request.method 用户提交方式 GET or POST
        #request.GET.get('',None)
        #request.POST.get('',None)

        返回数据
        return Httpresponse("字符串")
        return render(request,'html模板路径')
        return redirect('')
        redirect不能填模板路径,因为跳转页面的时候不是后台做的,因为后台并不能获取跳转页面的模板文件,譬如www.baidu.com,而且在验证通过之后告诉客户端一个跳转的url,你在发一次请求到那个url过去,所以才跳转页面

注:如果是通过get方式提交数据,那么浏览器是通过http://127.0.0.1:8000/home?username=1231&password=4123方式传递username和password两个值的,在django端则是通过print(request.GET.get(‘username’))获取具体的key值

13.模板渲染

def func(request):
    return render(request,"index.html",{'current_user':'alex'})
<html>
    <body>
        <div>{{current_user}}</div>
    </body>
</html>



当请求到达视图函数,先把模板拿过来,然后发现特殊字符,将参数和特殊字符一渲染,渲染完成之后就会形成一串字符串,就是把alex替换到html中的current_user,然后将生成好的整个页面返回给用户

###############################################
for 循环

def func(request):
    return render(request,"index.html",{'current_user':'alex','user_list':['alex','eric'])}

index.html

<html>
    <body>
        <div>{{current_user}}</div>
        <ul>
            {% for row in user_list %}
                <li>{{ row }}</li>
            {% endfor %}
        </ul>
    </body>
</html>
###############################################
索引

def func(request):
    return render(request,"index.html",{'current_user':'alex','user_list':['alex','eric'],'user_dict':{'k1':'v1','k2':'v2'})}

index.html

<html>
    <body>
        <div>{{current_user}}</div>
        <a>{{user_list.0}}</a>
        <a>{{user_list.k1}}</a>
    </body>
</html>

############################################
if else

def func(request):
    return render(request,"index.html",{'current_user':'alex',"age":18,'user_list':['alex','eric'],'user_dict':{'k1':'v1','k2':'v2'})}

index.html

<html>
    <body>
        <div>{{current_user}}</div>
        <a>{{user_list.0}}</a>
        <a>{{user_list.k1}}</a>
        {% if age >8 %}
            <a>有年龄</a>
            {% if age >17 %}
                <a>老男人</a>
            {% else %}
                <a>小鲜肉</a>
            {% endif %}
        {% else %}
            <a>无年龄</a>
        {% endif %}
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值