python+django搭建web项目

发布时间:2019-09-09 08:44:27编辑:auto阅读(1929)

    创建项目

    原文1:http://blog.csdn.net/yjx2323999451/article/details/53200243

    原文2:http://www.cnblogs.com/benshan/p/4445074.html

    原文3:http://www.runoob.com/django/django-first-app.html

    --------------------------------------------------------------------------------------

    连接mysql数据库

    原文4:http://www.cnblogs.com/yangmv/p/5327477.html

    原文5:http://www.cnblogs.com/taiguyiba/p/6058315.html

    原文6:http://www.jb51.net/article/42870.htm

    前提:

    配置好python+django环境


    1创建web服务器

    使用cmd命令进入到存放项目的目录中执行以下命令:

    python django-admin.py startproject mysite

    成功后会在目录中出现 mysite 目录,此处创建的为开发服务器


    2创建app

    一个项目中包含一个或多个这样的app。app可以理解为一块功能集合。比如产品管理模块就包含增删该查等功能,可以把产品管理叫做一个app。每个Django app都有独立的models,views等,易移植和被复用


    使用cmd命令进入到mysite目录下(创建的web服务器目录)执行以下命令

    python manage.py startapp test_pr

    test_pr才是web应用程序


    3创建模板文件的目录

    在项目根目录下新建一个templates目录


    4目录文件说明

    子目录mysite下表示工程的全局配置,分别为setttings.py、urls.py和wsgi.py,其中setttings.py包括了系统的数据库配置、应用配置和其他配置,urls.py则表示web工程Url映射的配置。

    子目录test_pr则是在该工程下创建的app,包含了models.py、tests.py和views.py等文件

    templates目录则为模板文件的目录

    manage.py是Django提供的一个管理工具,可以同步数据库等等

    -----------------------------------------------------------------------------------------------------------------------------------------------

    Django 里更关注的是模型(Model)、模板(Template)和视图(Views),Django 也被称为 MTV 框架 。

    在 MTV 开发模式中:

    M 代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取、如何确认有效性、包含哪些行为以及数据之间的关系等

      T 代表模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。

      V代表View,业务逻辑层。这一层包含访问模型的逻辑和按照模板显示。你可以认为它是模型和模板的桥梁。

    系统对app有一个约定:如果你使用了Django的数据库层(模型),你 必须创建一个django app。模型必须在这个app中存在。


    5启动

    在cmd中进入项目目录(cd d:*/mysite ),执行以下命令:

    python manage.py runserver 0.0.0.0:8000

    在浏览器中输入 127.0.0.1:8000,若能成功访问则表示启动成功


    6添加web工程页面

    打开test_pr/views.py文件,输入以下内容

    from django.http import HttpResponse
    
    
    def sayHello(request):
        s = 'Hello World!'
        current_time = datetime.datetime.now()
        html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time)
        return HttpResponse(html)


    7url映射的配置

    打开url.py文件

    from django.conf.urls import url
    from test_pr import views
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^$', views.sayHello),
    ]

    重启服务,访问http://localhost:8000/


    8逻辑和页面分离

    8.1在模板目录下创建一个student.html文件,并写入以下代码

    <!DOCTYPE html>
    <html>
       <head>
            <title>hello</title>
       </head>
     <body>
          <ul>
              {% for student in students %}
              <li>
                 id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}
             </li>
             {% endfor %}
         </ul>
     </body>
    </html>


    8.2修改 views.py文件,添加方法showStudents()

     def showStudents(request):
         list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]
         return render_to_response('student.html',{'students': list})

    8.3.添加url映射,打开url.py文件

    from django.conf.urls import url
    from test_pr import views
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^$', views.sayHello),
        url(r'^showStudents$', showStudents),
    ]

    8.4.修改settings.py模板配置:'DIRS': [BASE_DIR+r'\templates'],

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [BASE_DIR+"/templates", ],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]


    8.5.重启服务,访问http://localhost:8000/showStudents,出现:


    原文:http://code.ziqiangxuetang.com/django/django-models.html

    9.连接数据库

    首先需要安装数据库驱动啦,即mysql_python,

    如果你没安装 mysql 驱动,可以执行以下命令安装:

    pip install mysqlclient


    9.1配置数据库连接,打开settings.py文件编写代码

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql', //数据库的类型  
            'NAME': 'mysite', //所使用的的数据库的名字
            'USER': 'root', //数据库服务器的用户  
            'PASSWORD': '123456',   //密码  
            'HOST': 'localhost', //主机  
            'PORT': '3306',   //端口 
        }
    }


    修改完后进入DOS进入项目目录下执行python manage.py shell命令启动交互界面输入一下代码验证数据库配置是否成功。没报错则成功!


    >>> from django.db import connection

    >>> cursor = connection.cursor()


    10.创建模型

    在Django中使用数据库布局的第一步是将其表述为Python代码。

    文件中每个class相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 CharField )相当于数据库的字段类型 (例如 varchar )。

    10.1打开test_pr目录下的models.py

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.db import models
    
    
    # Create your models here.
    class Student(models.Model):
         
         name = models.CharField(max_length=20)
    


    字段


    1、models.AutoField  自增列= int(11)
      如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
    2、models.CharField  字符串字段
      必须 max_length 参数
    3.models.DateField  日期类型 date
      对于参数,auto_now =True则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
    4.models.DateTimeField  日期类型 datetime
      同DateField的参数
    5.models.EmailField  字符串类型(正则表达式邮箱)=varchar
      对字符串进行正则表达式
    6.models.FloatField  浮点类型= double
    7.models.IntegerField  整形
    8.models.SmallIntegerField  数字
      数据库中的字段有:tinyint、smallint、int、bigint
    9、models.TextField  字符串=longtext
    10、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
    11、models.URLField  字符串,地址正则表达式
    12、models.BinaryField  二进制
    13、models.ImageField图片
    14、models.FilePathField文件
    
    
    
    

    参数


    1、null=True
      数据库中字段是否可以为空
    2、blank=True
      django的Admin中添加数据时是否可允许空值
    3、primary_key =False
      主键,对AutoField设置主键后,就会代替原来的自增 id 列
    4、auto_now 和 auto_now_add
      auto_now 自动创建---无论添加或修改,都是当前操作的时间
      auto_now_add 自动创建---永远是创建时的时间
    5、choices
    GENDER_CHOICE =(
    (u'M', u'Male'),
    (u'F', u'Female'),
    )
    gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
    6、max_length
    7、default  默认值
    8、verbose_name  Admin中字段的显示名称
    9、name|db_column  数据库中的字段名称
    10、unique=True  不允许重复
    11、db_index =True  数据库索引
    12、editable=True  在Admin里是否可编辑

    11. 激活 模型

    打开settings.py 文件,找到 INSTALLED_APPS 设置,NSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状态

    INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'test_pr',
    )

    12.将新建的models同步数据库

    # Django 1.7 及以上的版本需要用以下命令

    -----------------------------------------------------------------------------------------------------------------

    步骤里面第一步将会在查询当前MySQL和本地的models的差异,生成合并的代码。 

    第二步是将合并代码导入数据库。

    cmd进入项目目录执行以下命令:

    python manage.py makemigrations
    python manage.py migrate

    # Django 1.6.x 及以下

    ----------------------------------------------------------------------------------------------------------------

    用下面的命令对校验模型的有效性:

    python manage.py validate

    看到 0 errors found 消息,一切正常。继续:

    运行下面的命令来生成 CREATE TABLE 语句:

    python manage.py sqlall test_pr

    sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来。

    运行 syncdb 命令创建表

    python manage.py syncdb

    --------------------------------------------------------------------------------------------------------

    所有的数据库查找都遵循一个通用模式:调用模型的管理器来查找数据。

    13.models对数据库增删查改

    原文:http://python.usyiyi.cn/translate/django_182/ref/models/instances.html

    打开models.py文件

    方式一:

    from django.db import models
    
    class Student(models.Model):
        name= models.CharField(max_length=20)
    
        @classmethod
        def create(cls, name
            student = cls(name=name)
            # do something with the book
            return student 
    
    student = Student.create("zhansan")

    方式二(推荐):

    from django.db import models
    
    # Create your models here.
    class Student(models.Model):
        # 如果没有models.AutoField,默认会创建一个id的自增列
        name = models.CharField(max_length=20)
        # model的字符串表现形式
        def __unicode__(self):
            return self.name
        objects = StudentManager()
     
    class StudentManager(models.Manager):
    
        def create_student(self, name):
            student = self.create(name=name)
            # do something with the book
            return student

    原文:https://my.oschina.net/leeyd/blog/367688

    增:create()

    objects.create(name = 'test') # 新增name字段的值为test

    删:delete()

    objects.all().delete() # 删除表中全部数据

    objects.get(aa='test').delete() # 删除一条aa等于'test'的数据

    objects.filter(aa='123').delete() #过滤出aa字段等于123的都删除

    改:update()

    get(id=id).update(name=name)

    查:all()、get()

    get(id=id)  # 查询单条数据

    filter(name=name) # 查询匹配条件的多条数据

    filter(name__contains=name)  # 模糊查询;name为查询的字段名

    filter(name__contains=name)[0:5] # [0]显示第一条 [0:2]会显示前两条,切片不支持负数

    dome

    # models.py

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.db import models
    
    
    class StudentManager(models.Manager):
    
        def create_student(self, name):
            # 方式一
            # student = Student(name = name)
            # # 保存到数据库
            # student.save()
            # 方式二(推荐)
            student = self.create(name=name)
            return student
    
        def select_all(self):
            # 查询全部
            list = self.all()
            return list
    
        def select_one(self, name):
            # a = []
            # # 查询单条数据
            # student = self.get(id=id)
            # a.append(student)
            # return a
            # 查询匹配条件的多条数据
            # student = self.filter(name=name)
            # 模糊查询
            student = self.filter(name__contains=name)
            # 根据字段内容排序后展示数据,根据字段内容逆向排序后展示数据,加一个负号order_by('-name')
            tt = student.order_by('name')
    
            # 限制数据条数, 相当于mysql limit
            tt1 = self.filter(name__contains=name)[0:5]  # [0]显示第一条 [0:2]会显示前两条,切片不支持负数
            return tt1
    
        def updata_student(self, id, name):
            self.get(id=id).update(name=name)  # update可多条update(name=name, bb="wahaha")
    
    # Create your models here.
    class Student(models.Model):
    
        # 如果没有models.AutoField,默认会创建一个id的自增列
        name = models.CharField(max_length=20)
    
        # model的字符串表现形式
        def __unicode__(self):
            return self.name
    
        objects = StudentManager()
    
    
    




关键字