Django学习之 - 基础部分

Posted 十年如一..bj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习之 - 基础部分相关的知识,希望对你有一定的参考价值。

学习记录参考:
讲师博客:http://www.cnblogs.com/wupeiqi/articles/5433893.html
老男孩博客:http://oldboy.blog.51cto.com/
运维平台参考:http://oldboy.blog.51cto.com/2561410/1123127


WEB框架简写与解释
解释:Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。
  MVC框架 == Model    View      Controller
        数据库    模板文件    业务处理
  MTV框架 == Model    Template     View
        数据库    模板文件    业务处理
  Django使用的就是MTV框架。


Django
安装:pip3 install django

一个项目的创建和编写步骤如下:
1:创建项目:django-admin startproject mysite
  mysite 创建的默认目录和文件
    - mysite # 对整个程序进行配置
    - init
    - settings    # 配置文件
    - url    # URL对应关系
    - wsgi    # 遵循WSGI规范,uwsgi + nginx 可在线上运行
    - manage.py   # 管理django程序
    - python manage.py
    - python manage.py startapp xx    # 创建一个app程序,注意每个项目可以单独创建一个APP(资产,配管,私有云等)
    - python manage.py makemigrations    # 生成数据库
    - python manage.py migrate # 生成数据库
  启动项目:python manage.py runserver 127.0.0.1:8001
也可以直接通过pycharm创建django站点和app,并且可以直接启动。

2:APP
当创建完项目管理平台后,可以在里面创建项目APP,如:
  python manage.py startapp cmdb
  python manage.py startapp openstack
APP创建完成后,需要将APP的名称添加到settings中的INSTALLED_APPS内。

APP 内包含:
  migrations:记录数据库操作和修改表结构的记录
        这里注意:在python3中从文件夹内倒入模块不需要__init__.py,在python2中需要。
  admin # Django为我们提供的后台管理
  apps # 配置当前APP
  models # ROM,写指定的类,通过命令可以创建数据库结构
  test # 单元测试
  views # 业务逻辑代码

3:静态文件和模板文件的配置
模板文件:
1:在项目内创建templates文件夹
2:将html页面文件放到此文件夹内
3:修改settings中在TEMPLATES修改:\'DIRS\': [os.path.join(BASE_DIR,\'templates\')],
4:views中的业务代码就可以直接调用html页面
如:return render(request,\'login.html\')
静态文件:
1:在项目内创建static文件夹
2:将css,js文件放置到此文件夹内
3:修改settings最后增加
  STATICFILES_DIRS = (
    os.path.join(BASE_DIR,\'static\'), #注意要加逗号
  )
4:静态文件在html中的引入:
  <link rel="stylesheet" href="/static/commons.css" />
  <script src="/static/jquery-1.12.4.min.js"></script>
注意:静态文件夹要用:static
4:注释CSRF,这项在初期配置使用可以先关闭,这个功能是方式XSS跨站脚本功能的。
5:定义路由规则
  url.py
    \'login\' --> 函数名
6:定义视图函数
  app下views.py
  def func(request):
    # request.method (GET / POST)
    # request.POST.get(\'\',None)
    # request.GET.get(\'\',None) GET是根据URL取值,获取请求发来的URL数据
    # return HttpResponse(\'字符串\')
    # return render(request,\'html模板文件路径\')
    # return redirect(\'只能填写URL\') 这里只能是url,因为是返回给客户,客户要重新访问
7:模板渲染
比如后台函数返回:return render(request,\'home.html\',{\'userinfo\':user_info})
前台页面通过变量渲染:<div>{{ userinfo }}</d iv>

特殊的模板语言
  -- {{ 变量名 }}
  -- {% for item in list %} {{ value }} {% endfor %} 可以进行if嵌套
  ###索引###
  如:return render(request,\'home.html\',{\'current_user\':\'jack\',
                    \'user_list\':[\'jk1\',\'jk2\'],
                    \'user_dict\':{\'k1\':\'v1\',\'k2\':\'v2\'}})
  以上返回值在html中取值方法;
    <div>{{ current_user }}
    <a> {{ user_list.0 }}</a> 值为列表的获取
    <a> {{ user_list.1 }}</a>
    <a> {{ user_dict.k1 }}</a> 值为字典的获取
    <a> {{ user_dict.k2 }}</a>
  ####条件##### 支持嵌套
  如:return render(request,\'home.html\',{\'current_user\':\'jack\',
                    \'user_list\':[\'jk1\',\'jk2\'],
                    \'age\': 18,
                    \'user_dict\':{\'k1\':\'v1\',\'k2\':\'v2\'}})
  条件判断方法:
  {% if age %}
    <a>为真</a>
    {% if age > 16 %}
      <a>...</a>
    {% endif %}
  {% else %}
    <a>为假</a>
  {% endif%}


实例1:用户登录认证并重定向到新页面见:login,home
url(r\'^login\',views.login),
url(r\'^home\',views.home),

view代码如下:

def login(request):
    # 获取用户提交的方法
    # request 包含了客户端用户发来的所有信息
    error_msg = \'\'
    if request.method == \'POST\':
        # 获取用户通过POST提交过来的数据
        # request.POST 方法封装了所有用户发过来的请求
        # uname = request.POST[\'username\']
        # upwd = request.POST[\'pwd\']
        # 最好用get方法获取数据,即使没有也不会报错
        uname = request.POST.get(\'username\',None)
        upwd = request.POST.get(\'pwd\',None)
        if uname == \'root\' and upwd == \'root\':
            # return HttpResponse(\'登录成功\')
            return redirect(\'/home\')
        elif not uname or not upwd:
            error_msg = \'用户名密码不允许为空\'
        else:
            # 用户名密码不匹配
            error_msg = \'用户名或密码错误\'
    return render(request,\'login.html\',{\'error_msg\':error_msg})
View Code

 

以上是关于Django学习之 - 基础部分的主要内容,如果未能解决你的问题,请参考以下文章

Django基础学习之Cookie 和 Sessions 应用

(转)Django学习之 第三章:动态Web页面基础

Django 学习之Django Rest Framework(DRF)

Python面向对象学习之八,装饰器

OpenGL基础学习之二代码基本结构

(转)Django学习之 第二章:Django快速上手