02 Django入门part1

一. 注意事项

1. 如何让你的计算机能够正常的启动django项目

1. 计算机的名称不能有中文. 我的电脑->属性->计算机名
2. 一个pycharm窗口只开一个项目. 
3. 项目里面所有的文件也尽量不要出现中文
4. python解释器尽量使用3.4~3.6之间的版本
    项目排错提示: 如果你的项目报错 你点击最后一个报错信息 去源码中把逗号删掉

2. django版本问题

LTS: 全称 Long Term Support 官方维护的版本

版本推荐: 1.8(2015) 1.11(2018) 2.2(2019)

1.X   2.X   3.X(直接忽略)
1.X和2.X本身差距也不大 主要以1.X为例 会明与2.X区别
启示语录: 公司之前用的1.8 满满过渡到了1.11版本 有一些项目用的2.0

3. django安装

国内清华源安装:

pip3 install django==1.11.11 -i https://pypi.douban.com/simple
    
提示: 如果已经安装了其他版本 无需自己卸载直接重新装 会自动卸载安装新的
    
排错: 如果报错 看看是不是timeout 如果是 那么只是网速波 重新安装即可

验证是否安装成功的方式: 
    1. 终端输入django-admin看看有没有反应
    2. 进入python交互式命令行
        >>> import django
        >>> django.get_version();
        '1.11.11'

运行django-admin命令报错Fatal error in launcher: Unable to create process using

# 运行django-admin创建django项目时报错
G:\Django
$  django-admin -v
Fatal error in launcher: Unable to create process using '"'
    
    
# 之前我win10崩了, 重新安装了系统, 导致很多命令都没法用了先卸载django
pip uninstall django

# 然后重新安装django
pip3 install django==1.11.11 -i https://pypi.douban.com/simple
    

# 提示: 如果pip命令也出现错误Fatal error in launcher: Unable to create process using, 那么更新pip命令
python -m pip install --upgrade pip

二. django基本操作

1. 命令行操作

第一步: 创建django项目

# 提示: 这种创建是创建到当前文件夹下, 如需创建指定文件夹需要切换到指定文件夹下再执行这条命令
django-admin startproject 项目名 

第二步: 启动django项目

'''一定要先切换到项目目录下'''
python3 manage.py runserver  # runserver后面跟要绑定ip和端口. ip不指定默认使用本机环回地址, 端口8000. 可以 --/ 查看命令具体使用方法.


# 上面启动了django以后, 在浏览器中输入开启所指定的ip:port访问页面内容出现如下一句话
Next, start your first app by running python manage.py startapp [app_label].

第三步: 创建应用

# 创建应用
python3 manage.py startapp app01  # app01 应用名应该做到见名知意

2. pycharm操作

第一步: 创建django项目

在创建项目时指定Application可以创建一个, 且同时也会在settings.py配置文件中INSTALLED_APPS中注册.

第二步: 启动django项目

第三步: 创建应用 (快捷键 crtl+alt+r)

第四步: 修改端口号以及创建server

没有配置时:

三. 应用

1. 创建的app介绍

django是一款专门用来开发app的web框架

django框架就类似于是一所大学(空壳子)
app就类似于大学里面各个学院(具体功能的app)
    比如开发淘宝
        订单相关
        用户相关
        投诉相关
创建不同的app对应不同的功能
    选课系统
        学生功能
        老师功能

一个app就是一个独立的功能模块

2. 创建的应用一定要去setting.py配置文件中找到INSTALLED_APPS进行注册

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',  # 注册全写
    'app01',  # 注册简写
]

3. 补充: 你在用pycharm创建项目的时候 pycharm可以帮你创建一个app并且自动注册

四. 目录结构

1. 目录结构介绍

mysite/
├── manage.py  # 管理文件. django的入口文件
├── mysite     # 项目目录
    ├── __init__.py
    ├── settings.py  # 配置
    ├── urls.py      # 路由和视图函数的对应关系(路由层)
    └── wsgi.py      # runserver命令就使用wsgiref模块做简单的web server
├── db.sqlite3       # django自带的sqlite3数据库(小型数据库 功能不是很多还有bug)
└── app01      # 应用目录
    ├── migrations   # 数据库迁移记录
        └── __init__.py
    ├── __init__.py
    ├── admin.py     # django后台管理
    ├── apps.py      # 注册使用
    ├── models.py    # 数据库相关的 模型类(orm)
    ├── test.py      # 测试文件
    └── views.py     # 视图函数(视图层)

2. setting.py文件介绍

BASE_DIR 项目目录
DEBUG 上线之后改为False.
ALLOWED_HOSTS 允许访问的主机. 上线之后可以写*. 星号表示所有
INSTALLED_APPS 注册的app. (app就是功能模块)
MIDDLEWARE Django中简件
TEMPLATES HTML文件存放路径配置
DATABASES 项目指定的数据库
LANGUAGE_CODE 文字编码
TIME_ZONE 时间

五. 命令行与pycharm创建django项目的区别

用命令行创建django项目: 用命令行创建django项目不会自动创建templates文件夹. 并且也不会自动配置templates文件夹路径, 需要你手动到setting.py配置文件中找到TEMPLATES在DIRSkey对应的[]中加上os.path.join(BASE_DIR, 'templates')
用pycharm创建django项目: 会自动创建并且自动配置路径, 还可以自动帮你创建一个应用并且自动注册, 不过只能在创建项目的时候创一个, 后续的应用(app01)创建需要手动到settings.py配置文件中找到INSTALLED_APPS中添加app01.apps.App01Config 或者 app01

TEMPLATES2者对比示例:

# 命令行创建不会自动有templates文件夹 需要你自己手动创建, 而pycharm会自动帮你创建并且还会自动在setting.py配置文件中找到TEMPLATES配置对应的路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

# pycharm创建
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')]
    ...
]

# 命令行创建
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        ...
]  

六. django小白必会三板斧

1. 基本使用

三板斧: HttpResponse,render,redirect

from django.shortcuts import HttpResponse,render,redirect

# 一. 返回字符串类型的数据
return HttpResponse('字符串')  


# 二. 返回HTML文件
# 1. 动态HTML页面: 
return render(request,'login.html')
def ab_render(request):
    # 视图函数必须要接受一个形参request
    user_dict = {'username':'jason','age':18}
    
    # 2. 动态HTML页面
    '''
    动态HTML页面的2种模板语法传值方式
        1) 'data': user_dict  
            user_dict: 指定需要传给HTML文件的数据
            data: 在HTML页面中操作的变量
        2) locals会将所在的名称空间中所有的名字全部传递给html页面
            传递给html页面的数据这里不仅仅是user_dict, 还有request
    '''
    # 第一种传值方式: 更加的精确 节省资源
    return render(request,'01 ab_render.html', {'data':user_dict,'date':123})   
    
    # 第二种传值方式: 当你要传的数据特别多的时候
    return render(request,'01 ab_render.html',locals())
	
    
# 三. 重定向    
# 1. 返回他人的网址的重定向
: return redirect('https://mzitu.com')

# 2. 返回自己的网址的重定向
return redirect('/index/')

2. 实例

'''views.py文件代码'''

from django.shortcuts import HttpResponse, render, redirect

# Create your views here.
"""
# urls.py文件
    url(r'^admin/', admin.site.urls),
    url(r'http_response_data/', views.http_response_data),
    url(r'render_data/', views.render_data),
    url(r'redirect_other/', views.redirect_other),
    url(r'redirect_self/', views.redirect_self),
    url(r'book_manage/', views.book_manage),
"""


def http_response_data(request):
    """
    HttpResponse 内部传入一个字符串参数,返回给浏览器。
    :param request:  请求相关的所有数据对象 比你之前的env更加牛逼.
        之前的env放的是一个大字典, 而我们可以对request使用对象的操作方式`request.`
    :return:
    """
    print(request.__dict__)       # {..., 'PATH_INFO': '/http_response_data/', ...}
    print(request.path_info)      # '/http_response_data/'
    return HttpResponse('返回字符串的数据!')


def render_data(request):
    """
    返回HTML文件
    :param request:
    :return:
    """
    return render(request, 'login.html')


def redirect_other(request):
    """
    重定向. 返回他人的网址的重定向
    :return:
    """
    return redirect('https://www.mzitu.com')


def redirect_self(request):
    """
    重定向. 返回自己的网址的重定向
    :param request:
    :return:
    """
    return redirect('/book_manage')


def book_manage(request):
    return render(request, 'book_manage.html')

七. 总结

# 4大注意事项:
    1. 计算机名称不能有中文
    2. pycharm一个窗口开一个项目
    3. 项目文件夹不要出现中文
    4. 解释器版本使用3.4~3.6
        如果项目报错点击最后一条报错信息, 去除源码中的逗号

# Django版本使用
    1xx 2xx 3xx
    使用LTS官方长时间支持的版本版本: 1.8  1.11 2.2

# Django安装: 再次安装会覆盖(配置了环境变量)
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple  django=1.11.11
    报错timeout是网速问题

# 检测安装成功: (配置了环境变量)
    终端: django-admin
    交互式命令行:
        import django
        django.get_version()

# Django基本操作
    # 命令行操作
        创建django项目:  django-admin startproject 项目名
        启动django项目:  python3 manage.py runserver
        创建应用:  python3 manage.py startapp 应用名

    # pycharm操作
        创建django项目:  new project -> Django -> Location,Existing Interpreter,create
        启动django项目:
        创建应用:
            ctrl+alt+r -> startapp 应用名.
            在创建项目时指定Application可以创建一个, 且同时也会在settings.py配置文件中INSTALLED_APPS中注册.

# 应用: 是一个具有具体功能的app, 是一个独立的功能. 例如: 选课系统
    !!!注意!!!: 创建应用时一定要去settings.py文件中找到INSTALLED_APPS中注册.
    注册的2种写法: app01.apps.App01Config   或者  app01

# 目录结构:
    mysite
        __init__.py
        manage.py        # Django启动入口
        mysite
            __init__.py
            settings.py  # 配置文件
            urls.py      # 路由与视图函数对应关系
            wsig.py      # runserver命令就是使用wsgiref模块做的简单的web服务器
        db.sqlite3       # Django自带的小型数据库
        app01
            migrations   # 数据库迁移记录
                __init__.py
            __init__.py
            admin.py     # django后台管理
            apps.py      # 注册使用
            models.py    # 数据库相关的模型类 ROM
            views.py     # 视图函数
            test.py      # 测试文件
        app....


    # settings.py文件
        BASE_DIR      项目目录
        INSTLLED_APPS 注册的app
        TEMPLATES     HTML文件路径
        ALLOWED_HOSTS 允许访问的主机


# 命令行与pycharm创建django项目的区别
    1. 命令行创建没有templates文件, 需要自己创建, 并到settings.py中找到TEMPLATES文件添加os.path.join(BASE_DIR, 'templates'). 
    2. 除了使用pycharm创建django时指定一个APPlication, 不需要到settings.py中找到INSTLLED_APPS中注册app, 都需要去注册. 
    
    
# django小白三板斧
    from django.shortcuts import HttpResponse, render, redirect
    return HttpResponse(指定返回的字符串)  # 返回字符串  
    return render(request, 指定返回的html在templates中的文件名)  # 返回HTML文件 静态
    return render(request, 指定返回的html在templates中的文件名, {'user': user_list}) # 动态方式1
    return render(request, 指定返回的html在templates中的文件名, locals())   # 动态方式2
    return redirect('https://www.baidu.com')  # 重定向他人网址
    return redirect('/index')  # 重定向自己网址
posted @ 2020-05-24 22:18  给你加马桶唱疏通  阅读(270)  评论(0编辑  收藏  举报