Django的基础及环境搭建

1.基本认知

Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!

Web应用框架(Web application framework)是一种开发框架,用来支持动态网站,网络应用程序及网络服务的开发。

澳门新葡新京 1

澳门新葡新京 2

http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理。Web应用框架处理完以后再发送给http服务器,http服务器再返回给用户。

2.工具准备

首先在Linux上创建虚拟环境:mkvirtualenv -p /usr/bin/python3
pydjts1
(名称)

澳门新葡新京 3

在虚拟环境中安装django:pip install django==1.11.7

澳门新葡新京 4

3.新建项目

两种方式:

1.在命令行中创建:django-admin startproject hello_django1

2.在pycharm编辑器中创建:

分别在Windows和Linux中创建一个新文件

澳门新葡新京 5

本地目录就选择在本地电脑上所创建的项目文件夹
(加上项目名称)

 澳门新葡新京 6

运行环境是在Linux中创建的虚拟环境

澳门新葡新京 7

 4.Django目录及说明

├── hello_django
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

manage.py django中的一个命令行工具,管理django项目
__init__.py 空文件,告诉python这个目录是python包
setting.py 配置文件,包含数据库信息,调试标志,静态文件等。
urls.py Django项目的URL声明
wsgi.py 部署服务器用到的

5.开发服务器

因为我们用的是linux上面的环境,所以为了让我们在windows的浏览器上能访问到我们的服务器,那么需要修改setting.py的文件,将里面的

ALLOWED_HOSTS = []  改为  ALLOWED_HOSTS =
[‘*’],这样才能使我们在本地能访问到我们linux上面的服务器。

linux虚拟机网络连接方式是nat端口转发时,需要设置http服务8000端口的转发:

澳门新葡新京 8

将配置文件和端口都设置好后就可以去运行我们的服务,开服务开启.

开启服务的命令:python manage.py runserver 0:8000

pycharm中有两种方式可以开启服务.

1.在pycharm中的配置,在运行服务器配置的页面改成0.0.0.0的host
,然后保存运行.

澳门新葡新京 9

2.在Tool工具,点击Run manage.py Task…
,这样就能打开项目的manage管理器,然后在下面输入运行服务器的命令runserver
0.0.0.0:8000

澳门新葡新京 10

当服务启动后,我们打开浏览器输入ip:端口回车就能看到It workd!的页面,这就说明我们已经访问到了我们linux上面的django开发服务器了。澳门新葡新京 11

 

 注意: 从这些开启的方式中选择一种方便的去开启服务就可以了,不要重复操作,
重复操作端口就会被占用.

网址url的详解:url 统一资源定位符

6.创建视图函数

在项目目录下创建views.py视图函数

澳门新葡新京 12

定义试图函数相关的URL(hello_django/urls.py)

澳门新葡新京 13

文件保存好后,检查服务器是否正常运行,然后在浏览器上输入ip地址:8000端口/hello就能在网页上查看到hello django!(127.0.0.1:8000/hello)

  ps:以百度为例:

7.新建应用(app)

一个项目可以包含多个应用,下面是创建应用的命令:python manage.py startapp movie

在pycharm中打开项目的manage管理器,
然后输入创建应用的命令:startapp appname(app名称)

澳门新葡新京 14

 

  第一部分:https代表协议

  第二部分:www.baidu.com代表域名,也就是百度web服务的ip和端口

  第三部分:路径,看起来貌似什么都没有,其实它是‘/’代表根路径

 

 

 

完善框架雏形代码:(这只是模拟实现浏览网页)

def handler_client(client_socket):
    # 就是客户端(浏览器给我们发送的请求)
    request = client_socket.recv(1024)
    print(request)

    # 伪代码:
    if 路径 == '/':
        function1()
    if 路径 == '/news/':
        function2()
    if 路径 == '/girls/':
        function3()

def function1():
    client_socket.send(b'HTTP/1.1 200 OK \r\n\r\n')
    client_socket.send(b'返回首页!')


def function2():
    client_socket.send(b'HTTP/1.1 200 OK \r\n\r\n')
    client_socket.send(b'新闻')


def function3():
    client_socket.send(b'HTTP/1.1 200 OK \r\n\r\n')
    client_socket.send(b'美女')

  这样的话,在我们修改完成后,我们的雏形代码就
会有判断路径,并且根据路径不同调用不同的函数去返回不同的信息这个功能了

搭建开发环境

安装Virtualenv  

  升级pip命令:sudo pip3 install –upgrade pip

  安装命令:sudo pip3 install
virtualenv

  cd myproject

  创建名为venv为虚拟环境目录名,目录名自定义: virtualenv venv

  你可以选择使用一个Python解释器:virtualenv
-p /usr/bin/python3.6 python3 ( -p参数指定Python解释器程序路径)

  激活虚拟环境:source
venv/bin/activate

    从现在起,任何你使用pip安装的包将会放在 venv 文件夹中,与全局安装的Python隔绝开。

  停止虚拟环境:deactivate

 

  删除虚拟环境: rm -rf venv

安装virtualenvwrapper(确保virtualenv已安装) 它把你所有的虚拟环境都放在一个地方。

sudo pip3 install virtualenvwrapper

pip install virtualenvwrapper-win  #Windows使用该命令

 

在~/.bashrc写入以下内容

  export WORKON_HOME=~/Envs   
#
virtualenvwrapper存放虚拟环境目录

  source /usr/local/bin/virtualenvwrapper.sh 
 #virtrualenvwrapper会安装到python的bin目录下,所以该路径是python安装bin/virtualenvwrapper.sh

source ~/.bashrc#读入配置文件,立即生效

 

virtualenvwrapper基本使用

创建虚拟环境: mkvirtualenv venv   (venv 这个名字任意)

在任何目录执行下面命令:

  mkvirtualenv –python=/usr/bin/python3.6 python3

查看当前的虚拟环境目录:  workon [两次tab键]

 

切换到虚拟环境: workon python3

退出命令:deactivate

删除虚拟环境命令:rmvirtualenv python2

查看虚拟环境中已经安装的包: pip list

查看虚拟环境中已经安装的其它软件:pip freeze

安装django:以1.8.2版本为例,这是一个稳定性高、使用广、文档多的版本:

  pip3 install django==1.8.2

安装mysql驱动包:

在 python3 中,改变了连接库,改为了 pymysql 库,使用pip install pymysql 进行安装,直接导入即可使用

 

但是在 Django 中, 连接数据库时使用的是 MySQLdb 库,这在与 python3 的合作中就会报以下错误了

 

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'

 

解决方式1:

在 __init__.py 文件中添加以下代码即可。

import pymysql

pymysql.install_as_MySQLdb()   顾名思义:让 Django 把 pymysql 当成 MySQLdb 来使用吧,但是这样的解决方式并不是一蹴而就,以后每个新项目当中我们都要去写上这两行代码,比较繁琐,不推荐

解决方式2:

安装另外一款可以替代MySQLdb的包,mysqlclient,但是这个包在windows下是完美支持的,如果要在linux下使用,需要先安装依赖包,在终端经过以下两个命令后,数据库完美解决问题,推荐使用。

 

  sudo apt-get install python3-dev libmysqlclient-dev

 

  pip install mysqlclient

创建项目和应用:

1. 常用命令
  创建test1项目命令:django-admin startproject test1

   创建booktest应用命令:python3 manage.py startapp booktest

   运行服务器命令:python3
manage.py runserver 8080

   生成迁移文件命令:python3
manage.py makemigrations

   执行sql语句生成数据表命令:python3 manage.py migrate

 创建一个管理员用户命令:python3
manage.py createsuperuser#按提示输入用户名、邮箱(可忽略不写)、密码

 

2. 创建项目和应用: 

1)、打开终端窗口

2)、进入到创建好的虚拟环境中
   workon 虚拟环境名(python3)

 

3)  、找到提前创建好的项目管理文件夹
并且进入到这个文件夹中(例如,在~/Desktop下创建一个django项目管理文件夹) 

 

4)  、在这个文件夹当中使用命令去创建我们的项目:

 

    django-admin startproject  testdjango

 

    创建好项目之后,查看,会看到我们的testdjango项目目录

 

5)  、项目创建成功后进入到项目目录当中,创建项目的第一个应用

 

    python manage.py startapp test1

3、项目目录文件详解:

  manage.py:一个命令行工具,可以使你用多种方式对Django项目进行交互。

  内层的目录(test1):项目的真正的Python包。

 

  _init _.py:一个空文件,它告诉Python这个目录应该被看做一个Python包。

  settings.py:项目的配置

  urls.py:项目的URL声明,用来做url路由匹配

  wsgi.py:项目与WSGI兼容的Web服务器入口.

4、应用文件作用:

  admin.py:这个文件用于在admin后台注册模型类

  models.py:书写对应的数据库模型类

  views.py:用于书写我们的控制逻辑

  _init _.py:可以对应用进行初始化,可以让应用的目录作为包来使用

 

  tests.py:用来做测试使用

 

  migrations :用来存放数据模型迁移文件

5、 django一次会话的实现(案例)

  django处理会话三大步:

  1、配路由 :每个请求都会对应特定的路由,路由是在urls文件当中去配置

  2、写视图:每个路由都会对应特定的处理函数(类),其实就是我们的view视图

  3、返数据每个处理函数(类)都会返回特定的响应信息(字符串,html内容,json)

6、django是用来做网站的,网站的基本组成是网页,而网页上又包含了一个或者多个会话,因此我们可以大胆断言,django就是用来处理这一个一个会话的(我们也可以这样理解:网页上包含了一个或者多个请求)。

 

 

 

 

 

  实现第一个会话的流程代码:  

1)、打开终端,进入到我们的虚拟环境python3

 

2)、在我们预先准备好的项目管理文件夹django下创建新的项目testdjango

 

3)、进入到我们的项目文件夹下创建我们第一个应用test1

 

4)、使用pycharm打开我们的项目

 

5)、在pycharm中将虚拟环境设置为我们的python3虚拟环境

 

6)、对项目进行基本设置settings

  将我们第一个app添加到INSTALLED_APPS 中

  澳门新葡新京 15

7)、配置路由 :在项目设置目录下,也就是和项目同名的那个目录下有个urls文件,这个就是我们的路由配置文件,在文件中会有这样的代码

 

澳门新葡新京 16

urlpatterns就是我们的路由,我们可以在这个路由当中去配置我们的第一个路由,其实就是一个url方法,这个方法有四个参数

 

  正则         浏览器网址输入网址发送请求后,会通过这个正则去匹配url中的路径

  view函数
  如果正则匹配网址的路径成功就会把请求传给相对应的这个函数处理

  可选参数    一般不用

  name     代表反向解析(软连接)名字

 

8)、书写view视图处理函数

  澳门新葡新京 17

9)、urls导入书写的视图:

  最后,我们在urls当中导入我们刚写好的view视图index如下所示:

  澳门新葡新京 18

 

10)、运行我们的服务测试:

运行服务两种方式,1、可以在终端中进入我们的项目,在项目文件夹下使用命令运行服务:python
manage.py runserver

 

项目默认会在本机8000端口运行

 

         2、我们也可以在pycharm当中,点击工具栏当中的Run,运行我们的项目

 

 

 

 

 

  按住ctrl点击http://127.0.0.1:8000,我们可以在浏览器上查看效果

 

 

  上面,我们通过一次会话,给浏览器返回了一句话,也就是一个字符串,假设,我们还想去返回一个html网页内容怎么去做呢?

1)、如果要返回去带有动态数据的网页内容,我们需要用到模板,首先需要在项目目录下创建一个文件夹templates,这个名字不能变,用来存储我们的html页面,html页面就是我们所说的模板。而templates,就是我们的模板文件夹。

 

2)、在settings文件当中,设置模板路径,settings当中有一项专门设置模板路径的地方,如果我们是通过终端命令创建的项目,那么这一项是需要我们手动配置,如果我们是用pycharm创建的项目,可以设置自动创建templates文件夹和配置模板路径。

澳门新葡新京 19

 

澳门新葡新京,3)、配置好上面两项之后,我们就可以在templates文件夹下创建我们的html页面,并且通过我们的view视图函数返回这个页面。

 

   要去返回这个页面,我们仅仅需要把view视图函数当中返回的HttpResponse对象,变成render对象即可:

 

from django.shortcuts import render,HttpResponse

# Create your views here.


def page_html(request):
    return render(request,'test.html')

 

路由传参:

未命名正则表达式组传参(位置传参):

澳门新葡新京 20

 

view视图

澳门新葡新京 21

命名正则表达式组传参(关键字传参):

 

from django.conf.urls import include, url
from .views import show_news_index,show_news_detail
urlpatterns = [
    url(r'^news_index/$',show_news_index,name='show_news_index'),
    #未命名正则表达式组传参(位置传参)
    # url(r'^news_index/(\d+)/(\d+)/(\d+)/$', show_news_detail, name='show_news_detail'),
    #命名正则表达式组传参(关键字传参)
    url(r'^news_index/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/$', show_news_detail, name='show_news_detail'),

]

 

view视图

from django.shortcuts import render,HttpResponse

# Create your views here.
def show_news_index(request):
    return render(request,'news_index.html')

def show_news_detail(request,day,month,year):
    print(request.path)
    print(request.method)
    if request.method == 'GET':
        return HttpResponse(year+'年'+month+'月'+day+'日')
    else:
        return HttpResponse('post')

html页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>我是新闻的首页</p>
<a href="{%%20url%20'news:news_date'%202018%204%2021%}">2018.4.21的新闻</a>

</body>
</html>

 

请求方式传参:

  view视图

def show_girls(request):
    a = ['yangmi','zhaoliying','yangying']
    return render(request,'girls_index.html',{
        'a':a
    })

  html页面: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>我是美女首页</p>
{% for meimei in a %}
    {{ meimei }}
{% endfor %}
</body>
</html>

 urls:

from django.conf.urls import include, url
from .views import girls_detail
urlpatterns = [

    url(r'^girls_detail/$', girls_detail, name='girls_detail'),
]

views:

from django.shortcuts import render,HttpResponse

# Create your views here.

def girls_detail(request):
    name = request.GET.get('name',None)
    return HttpResponse(name)

html(templates):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>我是美女的首页</p>
<a href="{%%20url%20'girls:girls_detail'%20%}?name=赵丽颖">赵丽颖</a>br
<br>
<a href="{%%20url%20'girls:test_post'%20%}">测试post传参</a>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章