Django相关学习——安装与初始

reference: datawhale
http

Django简介

Django是一个高度抽象的Python Web框架,最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发。

Django提供了对象关系映射(ORM, Object-Relational Mapping),可以通过Python代码来描述数据库结构。 通过数据模型语句来描述数据模型,并通过makemigrations及migrate等命令行工具自动生成数据模型迁移脚本并 自动创建数据库表。同时ORM屏蔽了底层数据库,大多数情况下,一套ORM模型可以运行在多种主流的关系型数据库上(如MySQL或PostgreSQL)。

通过定义URL规则及视图映射,Django可以方便的将URL路径与视图进行关联,并将Python代码与URL进行解耦。同时URL中的 宏将会以参数的形式传递给视图函数。

Django还提供模板功能,通过结合Python对象与模板文件,Django可以渲染出静态HTML文件并作为HTTP请求的返回内容。 (在本课程中使用前后端分离理念,未使用模板)

Django提供丰富的接口及扩展功能,拥有完善的社区及众多的三方扩展应用,可以极大简化开发过程,对于中小型项目可以 较大程度简化开发。

创建第一个Django项目

创建项目

在pycharm中安装好django后,输入django-admin startproject myweb创建名为myweb的项目,

创建项目中有
├── manage.py
├── myweb
| ├── init.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py

- manage.py是服务入口,通过该脚本可以与Django项目进行交互。通过运行python manage.py可以看到支持的命令,
常用的命令有:

• runserver 启动后端服务
• makemigrations 生成数据库迁移脚本
• migrate 更新数据库schema

- myweb为项目目录,主要包括配置及后端路由

• settings.py 项目配置,包括应用配置、中间件、数据库、缓存、日志等
• urls.py URL与View的关联配置,通过urlpatterns配置URL至处理函数或者类的映射关系
• wsgi.py及asgi.py 使用WSGI或ASGI入口部署应用

- 使用python manage.py startapp <APP_NAME>创建应用,在setting中配置

INSTALLED_APPS = [
# …
‘<APP_NAME>’,
]

其中的关键文件如下:
• admin.py - 注册model至django admin应用(本次课程不涉及)
• apps.py - app级别配置文件
• models.py - 数据库对象关系映射
• tests.py - 测试
• views.py - Views,展示相关
• migrations - 自动生成的数据库表迁移脚本

社区版pycharm遇到问题解决

cannot find templates

解决:在setting.py里把空的’DIRS’改成
‘DIRS’: [os.path.join(BASE_DIR,‘templates’)],

各文件配置

url.py配置示例

url.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns=[
	url(r'^index/',views.index)       #第一个参数:路径正则字符串;第二个参数:对应的视图函数
]
无名分组: url(r'^books/(\d{4}/', views.books/),

位置参数: url('^books/(\d{4}/(\d{1,2})/',views.year_month_books),

有名分组:  url('^books/?P<year>\d{4})/(?P<month>\d{1,2}/', views.year_month_books),

CBV: url(r'^login/',views.LoginView.as_view()),

view.py逻辑视图函数示例

from django.shortcuts import render,HttpResponse
 
 
def index(request):
	print(request.method) #'POST', 'GET'
	if request.method=='GET':
		return render(request, 'login.html')
		
	else:
		print(request.POST)
		username=request.POST.get('username')
		password=request.POST.get('password')
		if username=='estrella' and password=='123':
			return HttpResponse('登录成功')
		else:
			return HttpResponse('登录失败')

ORM表单

表1

class Book(models.Model):  #创建 book 
    title=models.CharField( max_length=30,unique=True, verbose_name='书名')
    public=models.CharField(max_length=50,verbose_name='出版社')
    price=models.DecimalField(max_digits=7,decimal_places=2,verbose_name='定价')
    def default_price(self):
         return '¥30'
    retail_price=models.DecimalField(max_digits=7,decimal_places=2,verbose_name='零售价',default=default_price)
    def __str__(self):
        return "title:%s pub:%s price:%s" % (self.title, self.public, self.price)
class Author(models.Model): #创建作者表
    name=models.CharField(max_length=30,verbose_name='姓名')
    email=models.EmailField(verbose_name='邮箱')
    def __str__(self):
        return '作者:%s'%(self.name)
class UserInfo(models.Model): #创建用户信息表
    username=models.CharField(max_length=24,verbose_name='用户注册')
    password =models.CharField(max_length=24,verbose_name='密码')

表2

# 创建表
class UserInfo(models.Model):
    # 定义chocies参数的对应关系,以元组(或者列表)的形式进行表述:
    choices = (
        (male, '男性'),
        (female, '女性'),
    )
    gender = models.CharField(max_length=2,choices = choices,default='male')

通过执行如下命令

python manage.py makemigrations
python manage.py migrate

对 index 应用进行了数据库迁移工作,并且在数据库中创建了三张表,分别是 Author、Book、UserInfo。而且在 index 应用下的 migrations 目录下生还成了一个 0001_initial.py 的文件,文件的内容如下:

from django.db import migrations, models
import index.models
class Migration(migrations.Migration):
    initial = True
    dependencies = [
    ]
    operations = [
        migrations.CreateModel(
            name='Author',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=30, verbose_name='姓名')),
                ('email', models.EmailField(max_length=254, verbose_name='邮箱')),
            ],
        ),
        migrations.CreateModel(
            name='Book',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=30, unique=True, verbose_name='书名')),
                ('pub', models.CharField(max_length=50, verbose_name='出版社')),
                ('price', models.DecimalField(decimal_places=2, max_digits=7, verbose_name='定价')),
                ('retail_price', models.DecimalField(decimal_places=2, default=index.models.Book.default_price, max_digits=7, verbose_name='零售价')),
            ],
        ),
        migrations.CreateModel(
            name='UserInfo',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('Username', models.CharField(max_length=24, verbose_name='用户注册')),
                ('password', models.CharField(max_length=24, verbose_name='密码')),
                ('gender', models.CharField(choices=[('M', '男性'), ('F', '女性')], default='M', max_length=2)),
            ],
        ),
    ]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值