• Django之前戏


    web应用程序

    Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件

    应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行。WEB应用程序一般是B/S模式。Web应用程序首先是“应用程序”,和用标准的程序语言,如C、C++等编写出来的程序没有什么本质上的不同。然而Web应用程序又有自己独特的地方,就是它是基于Web的,而不是采用传统方法运行的。换句话说,它是典型的浏览器/服务器架构的产物。

    基于socket写一个简单web应用

    import socket
    server = socket.socket()  # 不传参数默认就是TCP协议
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    while True:
        conn, addr = server.accept()  # 阻塞 等待客户端链接
        data = conn.recv(1024)
        conn.send(b'HTTP/1.1 200 OK
    
    ')
        print(data)
        # 手动处理http数据获取用户访问的路径
        current_path = data.decode('utf-8').split('
    ')[0].split(' ')[1]
        if current_path == '/index':
            # 路由匹配上之后返回index
             conn.send(b'index')
        else:
            # 当匹配不上的时候统一返回404
            conn.send(b'404')
    
        conn.close()

    基于wsgire写的web应用

    基于wsgire的应用.py

    from wsgiref.simple_server import  make_server
    from urls import *
    def run(env,response):
        print(env)
        response('200 OK',[('username','jason'),('password','123')])
        current_path =env.get('PATH_INFO')
        func = None
        for url_map in urls:
            if current_path==url_map[0]:
                func = url_map[1]
                break
        if func:
            res =func(env)
        else:
            res =error(env)
        return [res.encode('utf-8')]
    if __name__ == '__main__':
    
        server =make_server('127.0.0.1',8080,run)
        server.serve_forever()

    urls.py

    from views import *
    
    urls=[
        ('/index',index),
        ('/login',login),
        ('/reg',reg),
        ('get_time',get_time),
        ('/get_user',get_user),
        ('/get_db',get_db)
    ]
    

      

    views.py

    import time
    from jinja2 import Template
    import pymysql
    
    def index(env):
        return 'index'
    
    def login(env):
        return 'login'
    
    def reg(env):
        return 'reg'
    
    def get_time(env):
        current_time = time.strftime('%Y-%m-%d %X')
        return current_time
    
    def get_user(env):
        with open(r'templates/get_user.html','r',encoding='utf-8') as f:
            data = f.read()
        tmp = Template(data)
        return tmp.render(user_dic={'name':'jason',"password":'qwer'})
    def get_db(env):
        conn = pymysql.connect(
            host ='127.0.0.1',
            port =3306,
            user = 'root',
            password ='123',
            database ='day54',
            charset ='utf8',
            autocommit =True
        )
        cursor = conn.cursor(pymysql.cursors.DictCursor)
        cursor.execute('select * from userinfo')
        user_dict = cursor.fetchall()
        with open(r'temlates/get_db.html','r',encoding='utf-8') as f:
            data =f.read()
        tmp = Template(data)
        return tmp.render(user_dict=user_dict)
    def error(env):
        return '404 error'

    下载安装django

    djang下载
    推荐下载1.11.11版本
    1.命令行直接下载
    pip3 install django==1.11.11
    2.pycharm下载

    验证是否下载成功
    django-admin

    创建项目

    注意事项:
    1.计算机的名称不能有中文
    2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面
    3.项目名不能起中文

    4.用django一定要保证只有一个在运行状态 切记切记!!!!!!!

    5.一定记得清浏览器的缓存


    创建django项目的方式
    方式1(命令行创建):
    创建django项目
    django-admin startproject 项目名
    创建app应用
    python3 manage.py startapp app01
    启动django项目
    python3 manage.py runserver
    ps:用命令行创建django默认不会自动创建templates文件夹
    需要你手动自己创建(注意改文件夹路径是否被添加配置文件中)


    方式2(pycharm创建)
    FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理
    创建app
    pycharm命令行创建
    python3 manage.py startapp app01
    Tools下面run manage task功能栏
    启动点小绿色箭头

    在app01中的views.py:

    def index(request):
        return HttpResponse('index')
    def reg(request):
        user_dict={'name':'jason','password':'123'}
        return render(request,'reg.html',{'userdict':user_dict})
    def login(request):
        return redirect('http://www.xiaohuar.com')

    在项目名下的url.py:

    from app01 import  views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/',views.index),
        url(r'^reg/',views.reg),
        url(r'^login/',views.login),
    ]

    在templates中创建reg.html

    from app01 import  views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/',views.index),
        url(r'^reg/',views.reg),
        url(r'^login/',views.login),
    ]

    HttpResponse(index)

    内部传入一个字符串参数,返回给浏览器。

    render(reg)

    除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。

    将数据填充进模板文件,最后把结果返回给浏览器

    redirect(login)

    接受一个URL参数,表示跳转到指定的URL

    承蒙关照
  • 相关阅读:
    Docker从入门到精通——堆栈跟踪
    Docker从入门到精通——daemon.json解决和启动脚本之间的冲突
    Docker从入门到精通——启用调试
    Kubernetes——k8s集群组件
    Win10安装Linux,虚拟机安装Ubuntu各种问题汇总
    com.google.common.collect.Table 双键的Map
    【第37期】接口方式修改时间表任务的工作完成百分比属性,无权限问题解决方法
    org.apache.catalina.connector.ClientAbortException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。
    BigDecimal使用注意事项
    如何取到set集合的第一个元素。
  • 原文地址:https://www.cnblogs.com/guanlei/p/10981979.html
Copyright © 2020-2023  润新知