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>

 

posted @ 2018-03-01 16:16  王先生是胖子  阅读(138)  评论(0编辑  收藏  举报