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

    I.什么是Web框架?

    框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可帮你快速开发特定的系统。简单地说,就是你用别人搭建好的舞台来做自己表演。

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

    import socket
    
    def handle_request(client):
    
        buf = client.recv(1024)
        client.send("HTTP/1.1 200 OK
    
    ".encode("utf8"))
        client.send("<h1>Hello World</h1>".encode("utf8"))
    
    def main():
    
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind(('localhost',8001))
        sock.listen(5)
    
        while True:
            connection, address = sock.accept()
            handle_request(connection)
            connection.close()
    
    if __name__ == '__main__':
    
        main()
    View Code

    最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。

    如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML,就要花个把月去读HTML规范。

      正确做法:底层代码有由专门的服务器软件实现,我们用Python专注于HTML文档。因为我们不希望接触到TCP连接,HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务。

    这个接口是 WSGI:Web Server Gateway Interface

          -------------------------------自己写 Web框架 -----------------------

    urls

    from views import *
    
    
    URLpattern = (
        ("/login", login),
        ("/auth", auth),
        ("/alex", foo1),
        ("/egon", foo2),
        ("/reg", reg),
    
    )
    View Code

    views

    def foo1(request):
        f = open("templates/alex.html", "rb")
        data = f.read()
        f.close()
    
        return [data]
    
    
    def foo2(request):
        f = open("templates/egon.html", "rb")
    
        data = f.read()
        f.close()
    
        return [data]
    
    
    def login(request):
        f = open("templates/login.html", "rb")
    
        data = f.read()
        f.close()
    
        return [data]
    
    
    def reg(request):
        pass
    
    def auth(request):
    
        print("+++++",request)
    
        user_union,pwd_union=request.get("QUERY_STRING").split("&")
        _,user=user_union.split("=")
        _,pwd=pwd_union.split("=")
    
        if user=='Yuan' and pwd=="123":
            return ["登录成功".encode("utf8")]
    
        else:
             return [b"user or pwd is wrong"]
    View Code

    bin

    from wsgiref.simple_server import make_server
    
    
    from views import *
    import urls
    
    def routers():
    
        urls.URLpattern
    
        return URLpattern
    
    
    def application(environ,start_response):
    
        path=environ.get("PATH_INFO")
        print("path",path)
        start_response('200 OK', [('Content-Type', 'text/html'),('Charset', 'utf8')])
    
        urlpattern=routers()
        func=None
    
        for item in urlpattern:
            if path==item[0]:
                func=item[1]
                break
    
        if func:
    
            return  func(environ)
    
        else:
            return [b"404"]
    
    
    
    
    if __name__ == '__main__':
    
        t=make_server("",8800,application)
        t.serve_forever()
    View Code

    templates

      login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="dist/css/bootstrap.css">
    </head>
    <body>
    
    <h2>登录页面</h2>
    
    <form action="http://127.0.0.1:8800/auth">
        <p>姓名<input type="text" name="user"></p>
        <p>密码<input type="password" name="pwd"></p>
        <p>
            <input type="submit">
            
        </p>
    </form>
    
    </body>
    </html>
    View Code
    1  django-admin  startproject project_name     创建项目
    
    2  python manage.py startapp  appName          创建应用
    
    3  python manage.py runserver IP PORT          启动项目
    

    创建应用的方法二

     

    II.Django框架简单创建

    1.在cmd中输入(安装)

    pip3 install django
    

          
    2.操作命令:          

     # 创建Django程序
                django-admin startproject mysite
                # 进入程序目录
                cd mysite
                # 启动socket服务端,等待用户发送请求
                python manage.py runserver 127.0.0.1:8080
    
        python manage.py runserver  #默认 8000
    

    运行他人的项目:

    python manage.py runserver
    

    3.Django程序目录

    1.创建projec 

    mysite
                    mysite
                        - settings.py  # Django配置文件
                        - url.py       # 路由系统:url->函数
                        - wsgi.py      # 用于定义Django用socket, wsgiref,uwsgi
                
                    # 对当前Django程序所有操作可以基于 python manage.py runserver
                    manage.py  
    

    2.配置

    - 模板路径
                        template目录
                        
                        TEMPLATES = [
                            {
                                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                                'DIRS': [os.path.join(BASE_DIR, 'template')],    #!!!
                                'APP_DIRS': True,
                                'OPTIONS': {
                                    'context_processors': [
                                        'django.template.context_processors.debug',
                                        'django.template.context_processors.request',
                                        'django.contrib.auth.context_processors.auth',
                                        'django.contrib.messages.context_processors.messages',
                                    ],
                                },
                            },
                        ]
                    - 静态文件路径
                        static目录
                        
                        STATIC_URL = '/static/'
                        
                        STATICFILES_DIRS = (                #! ! ! 
                            os.path.join(BASE_DIR,'static'),
                        )
    View Code

    3.额外配置

    MIDDLEWARE = [
                    'django.middleware.security.SecurityMiddleware',
                    'django.contrib.sessions.middleware.SessionMiddleware',
                    'django.middleware.common.CommonMiddleware',
                    #'django.middleware.csrf.CsrfViewMiddleware',
                    'django.contrib.auth.middleware.AuthenticationMiddleware',
                    'django.contrib.messages.middleware.MessageMiddleware',
                    'django.middleware.clickjacking.XFrameOptionsMiddleware',
                ]
                    
    View Code

    III.路由配置系统(URLconf)

    URL配置(URLconf)就像Django所支撑网站的目录,本质是URL与要为该URl调用的视图函数之间的映射表;

     1.无名分组

    url(r'^(d+)/', views.ti),
    

    2.有名分组

    上面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图。在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。

    在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name 是组的名称,pattern 是要匹配的模式。

    url(r'^(?P<year>d{4})/(?P<month>d{2})$',views.have),
    

    views.py

    def have(request,month,year):
    
        return HttpResponse(year+'年  '+month+'月')
    

    3.路由分发

    #补充:

    1.启动之前,先执行自己的py文件

     2.自定义的XXX.py

    内容为:print(‘XXX’)

    3.操作apps.py

    #启动之前,去所有的app下,去找 XXX.py ,执行器中的代码

    IV 变量的过滤器(filter)的使用

    语法格式:      {{obj|filter:param}}
    
    # 1  add          :   给变量加上相应的值
       #
       # 2  addslashes   :    给变量中的引号前加上斜线
       #
       # 3  capfirst     :    首字母大写
       #
       # 4  cut          :   从字符串中移除指定的字符
       #
       # 5  date         :   格式化日期字符串
       #
       # 6  default      :   如果值是False,就替换成设置的默认值,否则就是用本来的值
       #
       # 7  default_if_none:  如果值是None,就替换成设置的默认值,否则就使用本来的值
    
    
    #实例:
    
    #value1="aBcDe"
    {{ value1|upper }}<br>
    
    #value2=5
    {{ value2|add:3 }}<br>
    
    #value3='he  llo wo r ld'
    {{ value3|cut:' ' }}<br>
    
    #import datetime
    #value4=datetime.datetime.now()
    {{ value4|date:'Y-m-d' }}<br>
    
    #value5=[]
    {{ value5|default:'空的' }}<br>
    
    #value6='<a href="#">跳转</a>'
    
    {{ value6 }}
    
    {% autoescape off %}
      {{ value6 }}
    {% endautoescape %}
    
    {{ value6|safe }}<br>
    
    {{ value6|striptags }}
    
    #value7='1234'
    {{ value7|filesizeformat }}<br>
    {{ value7|first }}<br>
    {{ value7|length }}<br>
    {{ value7|slice:":-1" }}<br>
    
    #value8='http://www.baidu.com/?a=1&b=3'
    {{ value8|urlencode }}<br>
        value9='hello I am yuan'
    View Code
  • 相关阅读:
    文件上传长度限制
    js之图片放大
    Jquery中$与$.fn的区别
    取消svn和文件的关联
    Java——如何创建文件夹及文件,删除文件,文件夹
    SQL语法
    linux环境运行java项目并有外部引用jar
    Eclipse-与Centos远程调试
    Eclipse-远程调试
    使用java代码执行linux命令
  • 原文地址:https://www.cnblogs.com/zhaochangbo/p/7009422.html
Copyright © 2011-2022 走看看