zoukankan      html  css  js  c++  java
  • Django之初

    Django之初

      Django的开始:

    #安装Django:
         pip3 install django
      
      
    #创建Django项目:
         django-admin startproject 项目名
         比如:
         django-admin startproject mystie
      
     
    #启动socket服务端,等待用户发送请求
         python manage.py runserver 127.0.0.1:8080
      
    View Code

      Django的创建APP:

    >>:django-admin startproject mysite
    #创建django项目
    >>:cd mysite
    #切换到mysite项目路径下
    >>mysite:python manage.py startapp app01
    #创建项目里的应用路径
    
    ###具体应用在路由系统里使用。不同的功能,用不同的App。
    View Code

      Django的目录结构:

    mysite项目名
        mysite(项目同名文件夹)
            - settings.py  #Django配置文件
            - url.py     # 路由系统:url->函数
            - wsgi.py   #web服务网关接口,用于定义Django用socket, wsgiref(默认的),uwsgi(生产环境中用的)
      #存放页面的文件夹
      templates
      
      #静态文件夹
      static
      #对当前Django程序所有操作可以基于 python manage.py runserver manage.py 
    View Code

      Django的静态文件配置:

    - 静态文件路径
        static目录
        STATIC_URL = '/static/'
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR,'static'),
        )

    Requset:用户请求的所有信息

    GET请求:只有requset.get 有值

    POST请求:requset.get 和 requset.post 都可以取值(get是请求头里url取值,post是请求体里取值)

    redirect:要跳转的url

      Django模板配置

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            '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',
                ],
            },
        },
    ]

    Django的url演示:

      在django中,要函数返回固定结果时,用HttpResponse,HttpResponse只写字符串。

      需要导入 django.shortcuts 模块

      在django中,每个函数都要有request参数。因为request参数里有用户的请求相关所有信息。并且request是对象的形式存在。

      导入 django.shortcuts 模块中的 render 。可以返回页面给用户

      render的第一个参数必须是request,第二个参数是需要跳转的页面。

     导入静态样式:

      在每个函数的第一个参数都是request,因为request里请求的所有信息,包括请求方式,是get还是post。所以,可以request.method来获取请求的方式结果

      判断是GET还是POST请求,并返回指定的页面,比如图中的login.html

      而在前端,也可以设置用什么样的方式进行提交。如果是POST,还可以往action里提交,可以在action里在设置一个url,那样的话,POST会再发一次请求。发的请求会根据url去路由中去匹配。匹配到就会执行url对应的函数。

      如图的method="POST" action="/login/"   这样的话,post请求会再发一个请求,去url中找到响应的url。并执行url对应的函数。

      但是,这一次的请求就由get,改为了post。

      既然请求已经改为post,那么在login函数中的 if 判断就不会走GET了,而应该 else 去找POST。

      拿到的是一个字典类型的数据集。

    <QueryDict: {'username': ['yanyan1314'], 'password': ['adfasd ']}>

      而既然POST请求体里有数据,那怎么取来哩。

      就这样取:

      但是本人不建议,因为 [ ] 里的字符串一变,就找不着了。

      

      所以,要用get的方法,很想字典取值的样子。这样的好处是,前端页面提交的数据,比如说没有username,他不会报错,而是提交一个None 

      用redirect方法,进行重定向,来实现跳转。旋转跳跃。

     1 def login(request):
     2     """
     3     处理用户请求,并返回内容
     4     :param request: 用户请求的相关的所有信息(对象)
     5     :return:
     6     """
     7     #通过请求方式,返回不同的信息
     8     if request.method == "GET":
     9         return render(request,"login.html")
    10     else:
    11         print(request.POST) #用户POST提交的数据,(请求体里的数据)
    12         username = request.POST.get("username") #取出字典里的数据。
    13         password = request.POST.get("password")  #取出字典里的数据。
    14         if username == "yanyan" and password == "1314":
    15             # 可以用 redirect 重定向,跳转到指定页面。
    16             return redirect("http://www.baidu.com")
    17         else:
    18             #登录失败
    19             return render(request,"login.html")

      在登录中,用户名或密码错误,怎么报错哩?

      铛铛铛铛:

      在前端的login中加 { { msg } } , 这个特殊字符走的是if request.method == "GET" 这一行,但是要加在else里的登录失败的地方。所以在return中设置。在render中加第三的参数,是字典的形式。

      login 函数:

     1 from django.shortcuts import HttpResponse,render,redirect
     2 
     3 def login(request):
     4     """
     5     处理用户请求,并返回内容
     6     :param request: 用户请求的相关的所有信息(对象)
     7     :return:
     8     """
     9     #通过请求方式,返回不同的信息
    10     if request.method == "GET":
    11         return render(request,"login.html")
    12     else:
    13         print(request.POST) #用户POST提交的数据,(请求体里的数据)
    14         username = request.POST.get("username") #取出字典里的数据。
    15         password = request.POST.get("password")  #取出字典里的数据。
    16         if username == "yanyan" and password == "1314":
    17             # 可以用 redirect 重定向,跳转到指定页面。
    18             return redirect("http://www.baidu.com")
    19         else:
    20             #登录失败
    21             return render(request,"login.html",{"msg":"username or password is error"})

      login.html 页面:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Login</title>
     6     <link rel="stylesheet" href="/static/commons.css" />
     7 </head>
     8 <body>
     9     <h1>Login</h1>
    10     <form method="POST" action="/login/">
    11         <input type="text" name="username">
    12         <input type="password" name="password">
    13         <input type="submit" value="Login">
    14         {{ msg }}
    15     </form>
    16 </body>
    17 </html>

       在url中传的之,是可以通过request.GET 获取到的。 

    POST请求和GET请求的区别:GET请求只有request.GET 的url中有值。在GET到头里有值,体里没值。

                  POST请求在request.POST和POST的请求体里都有值。 

    如果在后端的render中的{{msg}}中有列表数据:那么在前端如何呈现我想要的列表索引数据:

     1 def index(request):
     2     """
     3     处理用户请求,并返回内容
     4     :param request: 用户请求的相关的所有信息(对象)
     5     :return:
     6     """
     7     return render(
     8         request,
     9         "index.html",
    10         {
    11             "name":"george",
    12             "users":["hhhhhhhhhhh","aaaaaaaaa"],
    13         }
    14     )

    页面效果:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>index</title>
     6 </head>
     7 <body>
     8     <h1>index</h1>
     9     <h1>模板标记</h1>
    10     <p>{{ name }}</p>
    11     <p>{{ users.0 }}</p>     #就用 “.” 的形式取索引。
    12     <p>{{ users.1 }}</p>
    13 
    14 </body>
    15 </html>

    结果:

      那既然列表可取,字典该当如何取值啦~:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <h1>index</h1>
        <h1>模板标记</h1>
        <p>{{ name }}</p>
        <p>{{ users.0 }}</p>
        <p>{{ users.1 }}</p>
        <p>{{ user_dict.k1 }}</p>
        <p>{{ user_dict.k2 }}</p>
    
    </body>
    </html>

    结果:

    不仅仅是字典可以,还可以循环呢!循环列表里的字典

      惊不惊讶,意不意外:

    index 函数:

     1 def index(request):
     2     """
     3     处理用户请求,并返回内容
     4     :param request: 用户请求的相关的所有信息(对象)
     5     :return:
     6     """
     7     return render(
     8         request,
     9         "index.html",
    10         {
    11             "name":"george",
    12             "users":["hhhhhhhhhhh","aaaaaaaaa"],
    13             "user_dict":{"k1":"v1","k2":"v2"},
    14             'user_list_dict': [
    15                 {'id': 1, 'name': 'George', 'email': 'George@163.com'},
    16                 {'id': 2, 'name': 'George2', 'email': 'George@1632.com'},
    17                 {'id': 3, 'name': 'George3', 'email': 'George@1632.com'},
    18             ]
    19         }
    20     )

    index.html 页面:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>index</title>
     6 </head>
     7 <body>
     8     <h1>index</h1>
     9     <h1>模板标记</h1>
    10     <p>{{ name }}</p>
    11     <p>{{ users.0 }}</p>
    12     <p>{{ users.1 }}</p>
    13     <p>{{ user_dict.k1 }}</p>
    14     <p>{{ user_dict.k2 }}</p>
    15     <h3>循环</h3>
    16     {% for item in users %}   #循环的开头
    17         {{ item }}  #每个item,就是每个循环的元素
    18         <h1>{{ item }}</h1>  #每个item,就是每个循环的元素
    19     {% endfor %}     #循环的结尾
    20     <ul>
    21         {% for foo in users %}
    22             <li>{{ foo }}</li>
    23         {% endfor %}
    24     </ul>
    25     <h1>列表里的字典</h1>
    26     <ul>
    27         {% for foo in user_list_dict %}
    28             <li>{{ foo.id }} === {{ foo.name }} === {{ foo.email }}</li>
    29         {% endfor %}
    30 
    31     </ul>
    32 
    33 </body>
    34 </html>
  • 相关阅读:
    spring core与context的理解
    maven项目中pom.xml快速生成
    MariaDB常用命令
    MariaDB快速入门指南
    My_plan_51
    Oracle简介及安装
    Oracle单行函数
    oracle多表查询
    单点登录原理与简单实现
    JavaScript 的时间消耗
  • 原文地址:https://www.cnblogs.com/george92/p/8489024.html
Copyright © 2011-2022 走看看