Django Web框架之环境搭建

  • 简介

  •  Django是用python语言写的开源web开发框架,并遵循MVC设计.
    
  • 特点

  •  1.重量级框架 2.MVT模式
    
  • 环境安装

  •  创建虚拟环境
     	mkvirtualenv 虚拟环境名称 -p python3 	
     	(-p 指向python3)
     删除虚拟环境
     	rmvirtualenv 虚拟环境名称	
     查看本地虚拟环境
     	workon
     切换虚拟环境
     	workon 虚拟环境的名字
     退出虚拟环境
     	deactivate
     查看所安装的包
     	pip list
     需要装的依赖包
     	pip install django-redis
     	pip install jinja2
     	pip install pymysql
     	pip install pillow
    
  • Django创建工程 项目

  •  创建Django项目要进入虚拟环境才可以
     切换到虚拟环境
     	workon 虚拟环境名称
     查看一下当前虚拟环境所安装的依赖包
     	pip  list
     创建一个工程
     	django-admin startproject 工程名字
     进入到该工程
     	cd 工程名字
     测试是否创建成功 --启动服务
     	python manage.py runserver
     	注意:
     		端口默认 8000//或者指定python manage.py runserver ip:端口
     	进入谷歌输入 http://127.0.0.1:8000 如果出现it worked! 恭喜你 第一步成功了
     	注意如果出现以下情况:
     		**Error: That port is already in use. **
     	原因:
     		端口没有及时关闭 端口占用
     	两种解决办法: 
     		1.指定其他端口python manage.py runserver ip:端口
     		2.netstat -tunlp|grep 8000(端口)先根据端口查看pid
     			kill -9 pid 杀死该进程 就会将当前端口释放
     	开启redis-server报错 
     	# Creating Server TCP listening socket *:6379: bind: Address already in use
     	--解决方法
     		找到redis-server 的进程 
     			ps -ef | grep -i redis 
     		杀死该进程
     			kill -9 3086 
    
  • Django创建子应用

  •  1.首先确认是否在虚拟环境前会有虚拟环境的名称
       然后进入到创建的工程里面
     	cd 工程目录
     2.创建子应用:
     	python manage.py startapp 子应用名称
     3.用pycharm打开该项目
     	*配置pycharm的虚拟环境: 
     		先进入终端--进入虚拟环境--进入该项目
     		which python3 查看路径
     		然后将出现的路径粘贴到 
     		file--settings--project--interpreter--下拉菜单右侧齿轮点击--add local的弹框
     		切记:
     			一定要选择虚拟环境对应的python3
     			选择的完点击ok
     			检查一下是否存在Django-1.11.11版本
     			然后测试
     				点击pycharm的左下角有个Terminal(pycharm中的终端)
     				输入 python manage.py runserver
     				打开谷歌 访问 http://127.0.0.1:8000
     				即虚拟pycharm虚拟环境配置成功
     	4.注册app{settings.py}(由于自己写的子应用,运行的时候需要告诉Django--所以要注册)
     		在配置文件settings.py -> INSTALLED_APPS->'user-apps-AuserConfig'
     			(创建子应用名称---里面的apps(一成不变的)----apps里面定义的类名)!!相对路径即可
     		例如  user---自己创建的子应用名称
     			apps--创建子应用时自带的一个py文件
     			AuserConfig apps里面定义的类名(会自动提示,注意要选择和自己创建应用名字对应的)
     	***养成习惯 因为配置文件里的信息要用逗号分隔,为了防止不必要的麻烦,每注册一个app就在后面要加一个逗号
     	5.配置路由(urls.py)
     		urlpatterns = [
     			#系统自带的路由 不要动
     			url(r'^admin/', admin.site.urls),]
     			# 路由 ->视图函数
     			# url(r'^aa/', views.ceshi),
     				第一个参数写自己的功能, 以什么开头 都可以
     				[创建视图函数过程--- view.py]
     				第二个参数是 视图函数(路由要找视图函数)
     				由于视图函数(views.py)和urels.py 不在同一级所以需要导包
     				视图函数(views.py) 中定义函数
     				该函数的作用:	
     				接收请求对象 def 函数名(request):
     				(处理业务逻辑) [[[[[[[[[[[[[[[[暂时不涉及 后期补充]]]]]]]]]]]]]]]]
     				 from djang.http.response imporet HttpRequest
     				返回响应对象 return  HttpRequest('要返回的对象') 记得导这个包 以Django开头]						
     **综上所述 
     	第二个参数 自定义的子应用名.views.里面定义的函数名(views.里面定义的函数名)
     	两种都可 只不过导包模式不一致
     			启动验证一下:
     				python manage.py runserver
     			访问返回响应对象的值 全路由是 http://127.0.0.1:8000/aa (aa是第一个参数设置的.写啥跟啥)
     			注意: 如果出现404 错误 99%是路由写错了!!!	
     		总路由--子路由---视图函数
     			同名子目录--urls.py ->url(r'user/',include('子应用名称.urls'))
     			子应用目录--创建urls.py->url(r'user/',include('views.功能名称'))
     			子应用目录--views.py---定义函数
     		url(r'^aa/',include('子应用名称.urls')),//子路由是在新建的子应用中新建一个urls.py的文件 
     		!!主路由前面可以省略 aa url(r'^',include('子应用名称.urls'))
     			include中的字符串的意思是该子应用名称下的子路由
     			子应用名称.urls中
     			urlpatterns = [
     			# 子路由----视图函数
     			url(r'^login/$', views.index),]
     			由于该路由和views是统计关系 所以导包的时候
     			from . import views
     			现在访问的全路由
     			http://127.0.0.1:8000/aa/login
     			aa 为主路由 login为子路由
     	6.配置文件
     		import os //IO 操作用 读写用
     	BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     		//项目的绝对路径 用来做路径拼接
     		注意 : 在项目中自己新创建一个文件夹 不会自动加载 Django自己带的可以自动加载
     				所以需要对新创建的文件夹需要 将其路径拼接完全 然后就告诉项目要用该文件夹
     				拼接路径用到的函数 os.path.join(BASE_DIR,文件夹的名字)
     		__file__ 当前文件 指的是settings.py
     		abspath 绝对路径
     		os.path.abspath(__file__) 当前settings.py的绝对路径
     		os.path.dirname -> ../
     		os.path.dirname(os.path.abspath(__file__))当前settings.py的绝对路径../
     	    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))当前settings.py的绝对路径../../(也就是项目目录下)
     	    
     	    
     	    [加密:]
     	    SECRET_KEY = '0z65$&qdo72ta0v3j=+rnc4rkhmbd79@8-3kv=5bg-45!67du!'
     	    
     	    
     	    [DEBUG模式(生产模式的时候要改成False)]
     	    	DEBUG = True
     	    	ALLOWED_HOSTS = []
     	    
     	    	DEBUG = False
     	    	ALLOWED_HOSTS = ['127.0.0.1']
     	    **注意 :
     	    	如果为False模式 需要在 ALLOWED_HOSTS中设置域名
     	    	该模式不会提示错误
     	    	
     	    [INSTALLED_APPS]
     	    	注册app
     	    
     	    [MIDDLEWARE]
     	    	中间件的设置
     	    	
     	    [ROOT_URLCONF = 'logintest.urls']
     	    	总路由路径
     	    	
     	    [TEMPLATES]
     	    	模板配置
     	    
     	    [WSGI_APPLICATION]
     	    	WSGI协议
     	    	
     	    [DATABASES]
     	    	数据库
     	    	
     	    LANGUAGE_CODE = 'zh-hans'
     	    	中文
    
     		TIME_ZONE = 'Asia/Shanghai'
     			时区 差8个小时 默认0时区 东八区 上海
     		STATIC_URL = '/static/'
     	7.静态文件
     		1.静态文件路由
     		2.创建文件夹(无论上传下载都放在该文件夹中)
     	  	创建完要配置静态文件夹路径
     	  	STATICFILES_DIRS=[os.path.join(BASE_DIR,文件夹的名字)] 
     		 启动服务测试
     	 	http://127.0.0.1:8000/static/2.png
      8.路由屏蔽
      	1.路由列表从上到下
     	2.正则匹配问题默认匹配一个就结束了
     		有开头^ 有结尾$
     		结尾一定不要加错,要加在子路由上,加载总路由就会报404 废了
     		路由屏蔽的原因:路由列表默认从上往下加载,而正在正则匹配的时候如果上面的路由匹配成功了
     		就不会在继续往下匹配了,路由的不规范写法导致,路由被屏蔽了
     	解决方法:
     		严格按照路由书写规范书写,有开头有结尾符号
     	"""***注意***
     * 
     	url(r'^admin/$', views.urls),
     	路由中admin后面有/
     	如果在前端请求时么有加/ 
     		从正则的角度是不能匹配成功的
     		从用户的角度是可以匹配成功的,实质没有成功 只是进行了重定向
     		没有找到带/的路由 后台默认重定向给补上/所以在用户角度成功
     		后面加/会给用户带来方便 至于加不加 看公司需求
     		/代表文件夹 url代表文件资源
     		加/违反了url 标准规范写法
     	[Django中定义路由时,通常以斜线/结尾,
     	其好处是用户访问不以斜线/结尾的相同路径时,
     	Django会把用户重定向到以斜线/结尾的路径上,而不会返回404不存在。
     	如用户访问 index 或者 index/ 网址,均能访问到index视图
     	虽然路由结尾带/能带来上述好处,但是却违背了HTTP中URL表示资源位置路径的设计理念。是否结尾带/以所属公司定义风格为准。]"""""
      9.路由的反向解析
      	使用场景是重定向
     	a.路由的正向解析:settings.py ---root_url='zdemo.urls'--urls.py --总路由--子路由--视图函数
     					                              指向项目的总路由文件
     	b.路由的反向解析:视图函数---子路由---总路由  ()
     	
     	作用: 用于重定向(redirect('路由'))
     		本来去A的 去B了就是重定向
     		redirect('/user/login/') 手写路由 易出错低级错误 ,不易扩展
     		reverse 倒置 
     		redirect(reverse()) 出错少,易扩展
     		
     	3步骤
     		1.给总路由添加名字 namesapce
     		2.给子路由添加名字 name
     		3.reverse('namespace:name') 求出来路由是多少
     		总路由添加名字:
     			namespace 写在总路由的include里面,写错了不报错 一定要注意不要放在include 外面
     			url(r'^cs/', include('ceshi.urls',namespace='center'))
     		子路由添加名字:
     			url(r'^center/', views.login,name='child')
     		
     		在视图函数中 :
     			url_path = reverse('center(总路由名字):child(子路由名字)')----导Django的reverse包
     		
     		重定向	
     		redirect(reverse('users:login1'))
     			redirect(reverse('总路由名称:子路由名称')) 
    

初来乍到,如有不对的地方,还请多多见谅----gongzy

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值