django开发步骤

在这里插入图片描述

安装django

pip3 install django

创建项目

cmd > cd到项目存放目录:
>django-admin startproject [projectName]

创建子APP

cmd:cd 到【projectName】目录里
>python3 manage.py startapp [appName]

添加urls.py文件

app_name = 'Post'   # 这里是为了url反向解析用
urlpatterns = [
    # 这里放映射的view
]

配置setting.py

#子APP
INSTALLED_APPS = [
	# ......
    'django.contrib.staticfiles',
    'appName', 
]
#数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
    'mysql': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'MySite',
        'USER': 'xxx',
        'PASSWORD': 'xxxxx',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}
# 语言
LANGUAGE_CODE = 'zh-hans'
# 时区
TIME_ZONE = 'Asia/Shanghai' 
# 配置HTML模板的路径
TEMPLATES = [{
	'DIRS': [os.path.join(BASE_DIR, "templates")],
}]
# 静态文件 js css img 等
STATIC_URL = '/static/'  # html 开头{% load static %} src={% static '/img/bg.png' %}
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

# 即项目路径下的media文件夹,没有则自动创建
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
# 这个是在浏览器上访问该上传文件的url的前缀 ‘/media/’
MEDIA_URL = '/media/'

Project 的 urls.py

import appName
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('appName.urls',namespace='appName')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
#  为了网页显示上传的图片/文件


app的urls.py

from django.urls import path
from appName import views
app_name = 'appName'
urlpatterns = [
    path(r'', views.index,name='index'),
    path(r'^detail/post-(?P<pk>\d+)$', views.detail, name="detail"),  # 详情页
]
# html 就可以使用url别名 {% url 'appName:index' %} 方便维护

数据库迁移+实现

https://blog.csdn.net/weixin_40156487/article/details/81512807

迁移

cmd执行:

> python manage.py makemigrations
> python manage.py migrate

创建超级用户

cmd执行:

> python manage.py createsuperuser
# 一定要先迁移再创建

Models

from django.db import models
from django.contrib import admin


class Category(models.Model):
    """分类"""
    name = models.CharField(max_length=100)

    
class Tag(models.Model):
    """标签"""
    name = models.CharField(max_length=100)
    
    
class Post(models.Model):
    """文章"""
    title = models.CharField(max_length=100)
    body = models.TextField()
    created_time = models.DateTimeField()
    modified_time = models.DateTimeField()
    excerpt = models.CharField(max_length=200, blank=True)  # 文章摘要,可为空
    # ForeignKey表示1对多(多个post对应1个category)
    category = models.ForeignKey(Category, on_delete=True)     
    tags = models.ManyToManyField(Tag, blank=True)
    views = models.PositiveIntegerField(default=0)  # 阅读量
    
    
# admin.site.register(Category)
# admin.site.register(Tag)
# admin.site.register(Post) 或者一起写
admin.site.register([Category,Tag,Post])


定义完models.py后,再进行一次迁移。
# 类名=数据库表名,且继承了models.Model,类字段=数据表字段(name),
# AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
# 数据类型则由
CharField(相当于varchar)、
TextField:大文本字段,一般超过4000个字符,
BooleanField:布尔字段,值为True或False。
NullBooleanField:支持Null、True、False三种值
IntegerField:整数。
DecimalField(max_digits=None, decimal_places=None):十进制浮点数。
FloatField:浮点数
DateField[auto_now=False, auto_now_add=False]):日期
TimeField:时间,参数同DateField
DateTimeField:日期时间,参数同DateField
FileField:上传文件字段
ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片
例: photo = ImageField(upload_to = ‘photos/’)

# DateField(相当于datetime)

关系:
一对多:models.ForignKey() 外键约束
多对多:models.ManyToManyField()
一对一:models.OntoOneField()

null,blank,db_index,default,max_length,primary_key,unique
imkundb
参数:
	null=false 是否可以为Null
	blank=false 是否可以为空
	db_index=false 是否为该参数创建索引
	default = 默认值
	max_length =30 限制字符长度 
	primary_key = false 主键,一般和AutoField()一起使用
	unique=false 是否唯一值

设置文件存储的路径

即项目路径下的media文件夹,没有则自动创建
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
这个是在浏览器上访问该上传文件的url的前缀
MEDIA_URL = '/media/'
例:
	 # 路径为“/media/photos/”
	photo = ImageField(upload_to = 'photos/') 
	photo = ImageField(upload_to = 'photos/%Y/%m/%d/')

模板 templates

创建templates目录

![](https://img-blog.csdnimg.cn/img_convert/96013d6225f8b348af07e24ab2b553b2.png#align=left&display=inline&height=174&margin=[object Object]&originHeight=174&originWidth=220&size=0&status=done&style=none&width=220)

index视图

1.在【appName】Post/views.py中实现index方法:
def index(request):
    """
    主页
    :param request:
    :return:
    """
    return render(request=request, template_name='Post/index.html')

2.在Post/urls.py中进行路由映射
urlpatterns = [
    url(r'^$', views.index, name="index"),
]

3.最后,一定要要修改静态页面中引用的路径。
<ul>
{% for post in post_list %}
	<li>{{post.Name}}</li>
    {% if(post.isTrue)%}
    	<a href='{% url 'appName:index' %}'>hello</a>
    {% endif %}
{% endfor %}
</ul>

模版继承

基类模板使用占位

{% block content %}
{% endblock %}

子类模板

{% extends 'base.html' %}
{% block content %} 
<p>继承了 base.html 文件</p> 
{% endblock %}

数据库操作


#insert:
  Test(name='runoob').save()  #新增
  
# select:
  # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
list = Test.objects.all() # filter相当于SQL中的WHERE,可设置条件过滤结果
response2 = Test.objects.filter(id=1) # 获取单个对象
response3 = Test.objects.get(id=1) # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
Test.objects.order_by('name')[0:2] #数据排序
Test.objects.order_by("id") # 上面的方法可以连锁使用
Test.objects.filter(name="runoob").order_by("id") # 输出所有数据 
for var in list:
    response1 += var.name + " "

#update:
  # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test1 = Test.objects.get(id=1)
test1.name = 'Google' test1.save() 
# 另外一种方式 #Test.objects.filter(id=1).update(name='Google') 
# 修改所有的列 # Test.objects.all().update(name='Google')

# delete:
  # 删除id=1的数据
test1 = Test.objects.get(id=1)
test1.delete() 
# 另外一种方式 
# Test.objects.filter(id=1).delete() 
# 删除所有数据 # Test.objects.all().delete()

CORS跨域:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from django.shortcuts import render
from django.shortcuts import redirect

# Create your views here.

from app01 import models
import datetime
import json
from django.shortcuts import HttpResponse
from infrastructure.model.enterprise_news_data import Enterprise_news_Data
from infrastructure.model.enterprise_news_data import Enterprise_News_Id_Info_Data
from infrastructure.public import status_info
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def enterprise_news(request):
    """
    企业信息
    :param request:
    :return:
    """
    if request.method == 'POST':
        ret = Enterprise_news_Data().select_enterprise_news()
        return_status = status_info.api_status()
        return_status.status["status"] = 0
        return_status.status["message"] = "成功"
        return_status.status["return_info"] = ret
        print(return_status.status)
        # return HttpResponse(json.dumps(ret))
        response = HttpResponse(json.dumps(return_status.status))
        response["Access-Control-Allow-Origin"] = "*"
        return response
    else:
        return HttpResponse()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值