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/