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

    web应用

       web应用顾名思义就是用户可以通过web来访问的一种应用程序,它有两种模式。

        ~ B/S模式  浏览器端/服务器端

        ~ C/S模式  客户端/服务端

      又因为用户多通过浏览器来访问web应用,所以多是B/S模式。其根本就是由socket来实现的。

    import socket
    
    def handle_request(client):
    
        request_data = client.recv(1024)
        print("recv_data: ",recv_data)
    
        client.send("HTTP/1.1 200 OK
    status: 200
    Content-Type:text/html
    
    ".encode("utf8"))    #需要遵循http协议
        client.send("<h1>Hello,World!</h1><img src=''>".encode("utf8"))
    
    def main():
    
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind(('localhost',8812))
        sock.listen(5)
    
        while True:
            print("the server is waiting for client-connection....")
            connection, address = sock.accept()
            handle_request(connection)
            connection.close()
    
    if __name__ == '__main__':
    
        main()
    View Code

     

    http协议

      http是超文本传输协议的缩写。

        ~ 基于TCP/IP协议的应用层协议

        ~ 响应模式,只有从客户端开始建立连接

        ~ 对之前的请求和响应不进行保存

        ~ 每次只创建一个连接

      请求协议包括两种请求方式:

        ~ get请求 get请求通常是在url后加上问号来发送数据,并且有大小限制

        ~ post请求 把数据放在请求体中,没有大小限制

    django简介

      MVC设计模式

        所谓MVC就是把Web应用分为模型(Model),控制器(Controller)和视图(View)三层,模型负责业务对象和数据库的关系映射,视图层负责页面,控制器负责根据请求实现响应操作。

      MTV设计模式

        M(Model)层,负责数据库和业务对象的关系映射,T(Templete)层,负责页面的设计(也就是一堆html文件),V(view),负责主要的业务逻辑。其实和MVC本质上都是一样的。

      实现一个基本的django工程的步骤:

        1,首先在model.py文件中创建所需要的表单关系。

        2,在url.py文件中的urlpattners中设置路由。

        3,在view.py文件中编写自己的业务逻辑。

        4,在Templete中,设计前端页面。

        注:1,若要使用SQLite外的数据库,需把settings.py文件中的DATABASES修改,如mysql:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'bms',           # 要连接的数据库,连接前需要创建好
            'USER':'root',        # 连接数据库的用户名
            'PASSWORD':'',        # 连接数据库的密码
            'HOST':'127.0.0.1',       # 连接主机,默认本级
            'PORT':3306            #  端口 默认3306
        }
    }

          2,数据库迁移命令

            makemigrations;migrate

          3,跨站请求伪造保护,csrf_token,在settings文件中注释掉,或者在模板中加入csrf_token标签。

          4,如果你的sqlite打不开,或者报错,多半时因为你的dirver没有安装。

    MVC

      路由控制

        本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。

        里有正则表达式与URL进行匹配,在1.6版本之前,都是用url调用的,现在使用path和rpath。

        普通匹配

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        repath('articles/2003/$', views.special_case_2003),
        repath('articles/([0-9]{4})/$', views.year_archive),
        repath('articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),]

        反向解析 (通过别名联系到url)

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        path('articles/2003/', views.special_case_2003 name =case_2003),
        rpath('articles/([0-9]{4})/', views.year_archive name= year),
        rpath('articles/([0-9]{4})/([0-9]{2})/', views.month_archive),]

        分组

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        repath('articles/2003/$', views.special_case_2003),
        rpath('articles/(?P<year>[0-9]{4})/', views.year_archive),
        rpath('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),]

       View

      视图层,接受web请求并返回响应,响应一定要存在。

      django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest 类中的属性。

        requst.GET  QueryDict类型,类似于字典的对象,包含了http get的所有参数。

        request.POST  QueryDict类型,将请求中的表单数据进行封装

        request.body  字符串类型 代表了请求报文的主体,在处理非http形式的报文很有作用,如json

        request.path  字符串类型,返回请求的路径。

        request.method  字符串类型 , 返回请求方式,如"post","get"

          request。FILES  包含所有的上传文件的信息

        request.user    表示当前登陆的用户对象

        request.COOKIES  包含所有的cookie

        request.session  表示当前会话

      HttpResponse对象

        1,Httpresponse()  括号内加入字符串作为响应体

        2,render()  括号内有三个参数

          1)request  用于生成响应的请求对象

          2)template_name  模板的文件名

          3)context  一个字典,用于渲染模板

        3,redirect()  重定向一个硬编码的url

      Template

        template需要将自己的路径添加到settings.py中。django将html文件直接耦合到自己的工程中。

        模板语法

          1,变量

            {{ name. }}  注:可以使用句点符,但是不能需要参数

          2,过滤器

            1),{{obj | default:noting }}如果为空使用默认值

            2),{{obj | length}}  返回值的长度

            3),{{obj | filesizeformat}}  数据大小格式化,转换为人类可读的

            4),{{obj | date:"Y-m-d"}}  转换为格式化的日期

            5),{{obj | truncatechar:5}}  长度超过指定数值的用。。。结尾

            6),{{obj | safe}}  确保变量不会被转义

          3,标签

            1),{%for i in list %}  {%endfor%}     注:循环序号可以用  forloop.counter表示

            2),{% if %}  {%else%}  {%end if%}

            3),{%with%}  使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的

             4),{%csrf-token%}  用于跨站请求伪造保护

            

        

  • 相关阅读:
    react-native 安卓支持 gif动态图
    react-navigation,StackNavigator,TabNavigator 导航使用
    poj3694 网络(板子题)
    POJ1275 Cashier Employment 差分约束(优化 二分)
    Codeforces Round #667 (Div. 3)
    POJ1201 Intervals 差分约束(贪心也可)
    YY的GCD
    Codeforces Round #666 (Div. 2) A~E
    Rendezvous
    创世纪
  • 原文地址:https://www.cnblogs.com/cuiyuanzhang/p/9811392.html
Copyright © 2011-2022 走看看