Django 基础
来源:互联网 发布:更新ios6的软件 编辑:程序博客网 时间:2024/06/05 16:50
Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。
一、基本配置
1、创建django项目
终端命令:django-admin startproject 自定义项目名称(例如:mysite)
2、创建django应用
终端命令:python manage.py startapp 自定义项目名称(例如:blog)
3、启动django程序
终端命令:python manage.py runserver [0.0.0.0:]8080 #ip可以不写
4、创建超级管理员
终端命令:python manage.py createsuperuser
5、和数据库相关的命令
终端命令:python manage.py syncdb python manage.py makemigrations python manage.py migrate
二、程序目录
三、配置文件
1、数据库
#将django默认的数据库改为mysql,DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '3306', }}
备注:
1、由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替# 如下设置放置的与project同名的配置的 __init__.py文件中import pymysqlpymysql.install_as_MySQLdb()2、在使用mysql的时候,数据库的表名需要自己创建
(1)在创建django app(应用)的 models.py 文件中,把类写好
from django.db import models# Create your models here.class UserInfo(models.Model): username=models.CharField(max_length=64) password = models.CharField(max_length=64) sex = models.CharField(max_length=64) email = models.CharField(max_length=64)
(2)执行命令
python manage.py makemigrations python manage.py migrate
(3) 在views.py 文件中获取数据返回给用户
from django.shortcuts import render,HttpResponsefrom blog import modelsdef UserInfo(request): if request.method == 'POST': u = request.POST.get('username',None) p = request.POST.get('password',None) g = request.POST.get('gender',None) e = request.POST.get('email',None) models.UserInfo.objects.create( username = u, password = p, gender = g, email = e, ) #将获取到的数据放到数据库 url_list = models.UserInfo.objects.all() #从数据库中获取数据,以字典形式放到列表中 return render(request,'index.html',{'url_list':url_list})
2、模版
TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), )
备注:也可也直接在模板里面这样写
3、静态文件(在settings.py文件里面,静态文件一般是css样式,jQuery文件等)
STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )
四、路由系统
URL配置(URLconf)就像Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这样方式告诉Django,对这个URL调用这段代码,对于那个URL调用那段代码。
urlpatterns = [ url(正则表达式, views视图函数,参数,别名),]备注:参数是给视图函数传递的参数;别名是url的别名,主要是用在前端
1、单一路由对应
url(r'^index$', views.index),
2、基于正则的路由
url(r'^index/(\d*)', views.index),url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage), #这样给url定义了名称后,在视图函数中传递参数的时候,必须是这个名字例如:def manage(request,name,id): pass
3、添加额外的参数
url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), #在给视图函数传递参数的时候,应为字典的key
4、为路由映射设置名称
url(r'^home', views.home, name='h1'),url(r'^index/(\d*)', views.index, name='h2'),
设置名称之后,可以在不同的地方调用,如:
①模板中使用生成URL {% url 'h2' 2012 %}②函数中使用生成URL reverse('h2', args=(2012,)) 路径:django.urls.reverse③Model中使用获取URL 自定义get_absolute_url() 方法class NewType(models.Model): caption = models.CharField(max_length=16) def get_absolute_url(self): """ 为每个对象生成一个URL 应用:在对象列表中生成查看详细的URL,使用此方法即可 """ # return '/%s/%s' % (self._meta.db_table, self.id) # 或 from django.urls import reverse return reverse('NewType.Detail', kwargs={'nid': self.id})
*获取请求匹配成功的URL信息:request.resolver_match*
5、根据app对路由规则进行分类
url(r'^web/',include('web.urls')),
6、命名空间
6.1 project.urls.py
from django.conf.urls import url,includeurlpatterns = [ url(r'^a/', include('app01.urls', namespace='author-polls')), url(r'^b/', include('app01.urls', namespace='publisher-polls')),]
6.2 app01.urls.py
from django.conf.urls import urlfrom app01 import viewsapp_name = 'app01'urlpatterns = [ url(r'^(?P<pk>\d+)/$', views.detail, name='detail')]
6.3 app01.views.py
def detail(request, pk): print(request.resolver_match) return HttpResponse(pk)
以上定义带命名空间的url之后,使用name生成URL时候,应该如下:
①v = reverse('app01:detail', kwargs={'pk':11})②{% url 'app01:detail' pk=12 pp=99 %}
django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。
备注:有的时候我们会遇到,请求url的时候,出现403,权限禁止的情况,这时应在settings.py文件里面将
‘django.middleware.csrf.CsrfViewMiddleware’ 注销
备注:更多信息 http://docs.30c.org/djangobook2/chapter06/
- django基础
- django基础
- django 基础
- Django 基础
- django基础
- Django基础
- django基础
- django基础
- django基础
- django基础
- Django基础
- Django基础
- Django基础
- django 基础
- Django 基础
- Django基础
- Django基础-过滤器
- Django基础+优化
- 什么是ARM中的SP(堆栈)和LR?
- Java多线程--并发中集合的使用之ArrayBlockingQueue
- mysql分库分表方案浅析
- quartz定时任务框架调度机制解析
- 单链表(带表头)
- Django 基础
- 单调栈的总结
- av_write_frame()
- JavaSE学习----StringBuffer/StringBuilder类
- [安全漏洞公告专区]RHSA-2017:1615: kernel security and bug fix update漏洞预警及修复办法
- VGGNet 《VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION》学习笔记
- 在 Chrome 中清除、启用和管理 Cookie
- 9.8 遇到的一些问题 maven部署项目,mysql区分大小写
- Java多线程里总线锁定和缓存一致性的问题