由Python编写的一个开源的Web应用框架。其中版本Django 1.11最后支持Python2.7。现在是Django 2.0 ,支持Python 3.5及以后版本。
如果是Pycharm收费版的话,直接New Project->Django选择项目位置建立Django项目即可。
我使用的是Pycharm 小区交流版,并不能直接建立Django项目,需要自己安装插件,然后建立项目,将项目导入,获得Django项目。
通过路径File->Setting 点击加号,搜索Django,找到点击install pakages就开始安装Django插件。我这里安装好了,鼠标放到上面可以看到安装的路径。
记录下这个位置:D:\PythonProject\Pro_django\venv\,在这个目录下找一个Scripts目录,下面有一些.exe文件,配置环境变量。
为了windows在没有具体路径的情况下,能够找到我们安装的django程序,我们需要配置系统环境变量path。
配置这个位置其实是他安装后,有个django-admin.exe文件所在目录
打开命令行,转到非系统盘,mkdir创建一个目录方便你找到创建的项目。
创建后我们发现没有找到创建内容创建失败!!!
注意:后面我们发现需要使用django-admin,不用加.py。
命令行输入:django-admin startproject mydjango
我们可以看到已经创建了相应的Django项目。将Django项目移动到我们Pycharm存放项目目录,我的目录是D:PythonProject,然后导入项目就可以了。
打开Pycharm,选择File->Open,然后选择移动过去的Django项目文件夹,导入就可以了。
我们发现Pycharm创建的项目一般都有一个venv虚拟环境目录,来保存我们安装的插件包,而我们自己添加的项目没有,需要我们手动添加。
打开File->Setting,选择Project Interpreter ,点击齿轮,选择add,进入配置页面。
可以看到默认是在你的项目路径下,你也可以选择Existing environment 就是讲虚拟环境设置到已经存在的虚拟环境下。选择好后,点击OK就行了。如果你的路径下已经设置了,OK为不可点击。
其实这个操作就是在你项目所在路径拷贝一个venv整个活页夹内容。如果多个项目所使用的都是相同的插件,可以将venv这个档夹设置成同一个。就是选择Existion environment。
进入Download Django | Django 网站下载对应版本源码包,然后进行安装,安装好了通过django创建项目,然后将项目导入到Pycharm中。
下载好是一个压缩包,将它解压。
命令行进入Django源码所在目录执行python setup.py 程序,进行安装。
我们可以看到安装过程中将解压缩活页夹内容拷贝到python安装目录下site-packages中。D:\develop\Python2.7\Lib\site-packages
检查是否安装成功。
我们可以django.get_version()获取安装版本。
同样我们需要先使用命令行命令django-admin建立Django项目,然后导入到Pycharm中。如果要直接访问到安装的Django,需要配置系统变量path。而使用源码安装一般安装到python的安装目录下,然后在Scripts目录可以找到django-admin.exe可执行文件。只需要将django-admin.exe可执行文件所在目录路径配置到path就可以了。
1.Manage.py
命令行工具,提供管理功能:
1)创建app: python manage.py startapp miaTest
其中startapp是命令,miaTest为app的名字
2)管理数据库
Python manage.py sqlall miaTest:查看miaTest这个app下面所有的表
Python manage.py syncdb:同步数据库
3)管理服务器
Python manage.py runserver ip:port->更改访问的ip及埠号
可以借鉴:https://www.cnblogs.com/pangblog/p/3297186.html
2.Venv
Pathon项目需要建立一个虚拟工作环境,在这个虚拟工作环境中可以安装包,将其与其他项目隔离。主要解决Python软件开发过程中版本与依赖性问题以使得每个项目有自己独立的安装目录环境。
3.项目文件
1)init.py
该档默认是空的,只用定义了这个档,python的package标识。
2)Settings.py
Django项目的设置配置
3)Urls.py
网络url配置,会关联到views中的函数
4)Wsgi.py
环境的默认值。Wsgi:Web Server Gateway Interface, 只是一种规范,描述web server与web application通信的规范,简单理解是一个配置文件,建立服务器与django程序之间的桥梁。
视图view.py
from django.http import HttpResponse
def hello(request):
return HttpResponse("hello world!")
配置urls.py
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^hello$', view.hello),]
django配置:manage.py
Django项目创建完成,直接在Pycharm执行,我们发现直接执行完成,然后程序关闭,并不会像服务器一样挂着,等待网页链接请求。这里需要我们在Pycharm进行配置
选择Edit Configurations
在Parameters输入runserver 0.0.0.0:8000,然后点击apply。
再次运行,我们可以看到项目一直运行,等待连接。
浏览器127.0.0.1:8000 进行访问
在项目下创建templates文件夹,并在其中创建hello.html页面。修改setting.py 配置模板位置。
BASE_DIR+”/templates”
修改view.py
# from django.http import HttpResponse
from django.shortcuts import render
def hello(request):
# return HttpResponse("hello world!")
context = {}
context['hello'] = '你好'
return render(request,'hello.html',context)
通过这种方式返回内容到html页面。
每次访问页面时,会提示favicon.ico找不到。
.\mydjango\venv\Lib\site-packages\django\contrib\admin\static\admin\img
我们需要在Django实际安装目录下img下面增加一个favicon.ico文件。
Windows命令行tab自动补全功能:
cmd->regedit 打开注册表,找到HKEY_LOCAL_MACHINE\Software\Microsoft\ CommandProsessor\CompletionChar的键值改为9,就可以实现cmd类似UNIX的自动补全功能。
数据库配置,修改setting.py,找到DATABASES,根据你的数据库进行配置。
修改setting.py配置文件
Django规定要使用模型,必须先建立app,所以我们需要使用django-admin建立app。
同样将生成的app文件夹拷贝到我们项目下的目录。
修改model.py
# models.py
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
addr = models.CharField(max_length=20)
类名Test就是表名,name代表字段,CharField相当于varchar,代表字段类型。
加入新增app
修改setting.py,将我们新建的app加入配置文件
cd到项目目录:
执行python manage.py migrate,创建表结构。
执行python manage.py makemigrations TestModel,告知项目我们添加的app;
执行python manage.py migrate TestModel 创建表结构
这个操作相当于java中的逆向工程,根据你建立的类创建出数据库表。
打开数据库的管理软件,我们可以看到自动建立的数据库表
在项目文件下,创建testdb.py文件
#导入模型
from TestModel.models import Test
from django.http import HttpResponse
def addPeople(request):
test1 = Test(name='tang',age=22,addr='重庆') #创建模型对象,创建类对象
try:
test1.save()
return HttpResponse("数据添加成功
")
except:
print '保存失败!'
配置urls.py
url(r'^testdb$', testdb.addPeople)
运行manage.py,我们发现报错
这是由于我们没有按照MySQLdb模块。在File->settings->project interpreter 点击➕号,添加Install就可以了。
点击Install保错,我们可以手动安装,类似于java导包。
Python操作Mysql数据库
1、直接安装
使用Python操作Mysql数据库需要安装相应mysql的数据库接口api。我是在windows上安装的Python2.7。
直接在MySQL for Python download | SourceForge.net网址下载MySQL-python1.2.3-amd64-py2.7.exe,点击安装安装包即可。
它默认是找到你python的安装目录,然后安装到d:\develop\Python2.7\Lib\site-packages,site-packages中。
进入命令行,检测安装是否成功。
命令:import MySQLdb,输入 import MySQLdb,如果报错说明安装失败,没有提示说明安装成功。
2、需要在Pycharm中使用MySQLdb
我们使用Pycharm进行代码 编写,但是Pycharm环境没有MySQLdb插件,需要我们安装。
在File->setting ,选择Project Interpreter 点击加号,
找到插件然后点击install就完成了。但是,有可能报错,安装不上。
另一方式:
直接导MySQL-python 的api包到项目目录下进行安装,类似于java导包。
在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python 这个网站找到MySQL-python的相应版本api 包,点击下载。
将下载好的文件放到你的Pycharm项目活页夹\venv\Scripts活页夹下,然后命令行cd到相应目录,然后执行pip安装。
命令:pip install MySQL_python-1.2.5-cp27-none-win+amd64.whl
显示安装成功。
Pycharm插件中可以看到刚才安装好的MySQL-python。
HTML窗体进行网站交互。窗体提交有两种方式:POST和GET
创建search.py接收用户窗体请求。
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render_to_response
# 窗体
def search_form(request):
return render_to_response('search_form.html')
# 接收请求数据
def search(request):
request.encoding='utf-8'
if 'q' in request.GET:
message = '你搜索的内容为: ' + request.GET['q']
else:
message = '你提交了空窗体'
return HttpResponse(message)
创建窗体提交的HTML页面:
菜鸟教程(runoob.com)
urls.py增加访问search路径:
url(r'^search-form$', search.search_form),
url(r'^search$', search.search),
创建post提交HTML页面
post.html:
Title
{{ result }}
form.py:包括GET和POST提交处理函数
# !/usr/bin/python
# -*- coding: UTF-8 -*-
#窗体提交
from django.shortcuts import render_to_response
from django.http import HttpResponse
from TestModel.models import Test
from django.shortcuts import render
from django.views.decorators import csrf
#get提交页面
def search_form(request):
return render_to_response('form.html')
#get提交处理函数
def search(request):
request.encoding='utf-8'
if 'name' in request.GET:
temp = request.GET['name']
peoplelist = Test.objects.filter(name=temp)
context = {}
context['peopleList'] = peoplelist
if len(peoplelist) > 0:
return render( request,'search_result.html', context)
else:
return HttpResponse('没有找到数据!!!
')
else:
return HttpResponse('你提交了空窗体!!!
')
#post提交处理函数
def search_post(request):
ctx = {}
if request.POST:
ctx['result'] = request.POST['name']
return render(request,'form_post.html',ctx)
同样增加urls.py:
url(r'^search_form$',form.search_form),
url(r'^search$',form.search),
url(r'^search_post$',form.search_post)
每个view的第一个参数都是request,request包含当前url请求的一些信息。
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
request对象的参数:
path:请求页面的全路径,不包括域名—例如, "/hello/"。
Method:请求中使用的HTTP方法的字符串表示。全大写表示。例如:
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
GET:包含所有HTTP GET参数的类字典对象。参见QueryDict 文檔。
POST:包含所有HTTP POST参数的类字典对象。参见QueryDict 文檔。
服务器收到空的POST请求的情况也是有可能发生的。也就是说,窗体form通过HTTP POST方法提交请求,但是窗体中可以没有数据。因此,不能使用语句if request.POST来判断是否使用HTTP POST方法;应该使用if request.method == "POST" (参见本表的method属性)。
注意: POST不包括file-upload信息。参见FILES属性。
REQUEST:为了方便,该属性是POST和GET属性的集合体,但是有特殊性,先查找POST属性,然后再查找GET属性。借鉴PHP's $_REQUEST。
例如,如果GET = {"name": "john"} 和POST = {"age": '34'},则 REQUEST["name"] 的值是"john", REQUEST["age"]的值是"34".
强烈建议使用GET and POST,因为这两个属性更加显式化,写出的代码也更易理解。
COOKIES:包含所有cookies的标准Python字典对象。Keys和values都是字符串。
FILES:包含所有上传文件的类字典对象。FILES中的每个Key都是卷标中name属性的值. FILES中的每个value 同时也是一个标准Python字典对象,包含下面三个Keys:
filename: 上传文件名,用Python字符串表示
content-type: 上传文件的Content type
content: 上传档的原始内容
注意:只有在请求方法是POST,并且请求页面中