zoukankan      html  css  js  c++  java
  • django入门

    django venv

    • 安装python
    • 安装vscode
    • 创建虚拟环境;python -m venv .venv_hero
    • 创建并进入目录:mkdir pro_test1
    • 激活选择虚拟环境:activate
    • 创建项目:pip install django==2.0,django-admin startproject test1
    • 创建app:cd test1,django-admin startapp booktest
    • 设置settings.py:加入booktest

    django models

    • 定义模型类:booktest/models.py
    from django.db import models
    
    # Create your models here.
    class BookInfo(models.Model):
        title=models.CharField(max_length=20)
        pub_date=models.DateField()
        ## 返回信息能够查看
        def __str__(self):
            return self.title
            # return self.title.encode('utf-8')
    
    class HeroInfo(models.Model):
        name=models.CharField(max_length=20)
        content=models.CharField(max_length=100)
        gender=models.BooleanField(default=True)
        book=models.ForeignKey(BookInfo,on_delete=models.DO_NOTHING)
    
        # def __str__(self):
        #     return self.name
    
    • 生产迁移文件(名词:相当于sql语句文件):python manage.py makemigrations

    • 执行迁移文件(创建数据库,生成表的操作):python manage.py migrate --- 会生成db.sqlite3数据库

    • 使用shell操作:python manage.py shell

    ## 查询
    python manage.py shell
    from booktest.models import BookInfo
    BookInfo.objects.all()
    ## 插入
    b=BookInfo()
    b.title='射雕英雄传'
    from datetime import date
    b.pub_date=date(2020,7,12)
    b.save()
    BookInfo.objects.all()
    
    b=BookInfo()
    b.title='神雕侠侣'
    from datetime import date
    b.pub_date=date(2020,7,12)
    b.save()
    BookInfo.objects.all()
    ## 修改
    b=BookInfo.objects.get(id=1)
    b.title='神雕侠侣'
    b.save()
    BookInfo.objects.all()
    
    from booktest.models import HeroInfo
    h=HeroInfo()
    h.name='郭靖'
    h.gender=True
    h.content='降龙十八掌'
    h.book=BookInfo.objects.get(id=1)		## 外键关系
    h.save()
    HeroInfo.objects.all()
    

    django admin

    • 创建超级用户:python manage.py createsuperuser
    python manage.py createsuperuser
    Username (leave blank to use 'zhangfd'): admin
    Email address: admin@163.com
    Password:admin123456
    Password (again):admin123456
    Superuser created successfully.
    
    • 进入后台:python manage.py runserver
    LANGUAGE_CODE = 'zh_Hans'     		## zh_Hans --中文
    TIME_ZONE = 'Asia/Shanghai'       	## Asia/Shanghai
    
    • 注册模型类:admin.py
    from django.contrib import admin
    from .models import *
    
    # Register your models here.
    ## 定义后台显示信息
    class BookInfoAdmin(admin.ModelAdmin):
        list_display=['id','title','pub_data']
    class HeroInfoAdmin(admin.ModelAdmin):
        list_display=['id','name','content','gender','book']
    
    ## 对模型类进行注册后才能在后台查看到信息
    admin.site.register(BookInfo,BookInfoAdmin)
    admin.site.register(HeroInfo,HeroInfoAdmin)
    

    django views + urls

    • views.py即函数
    from django.shortcuts import render
    from django.http import HttpResponse	## 此处只用做功能介绍,实际中用render返回
    
    # Create your views here.
    ## HTTPRequest
    def index(request):
        ## HttpResponse
        return HttpResponse("hello world")	## 此处只用做功能介绍,实际中用render返回
    
    • 设置urls
    ## 分析
    #- def main():
    #    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test1.settings')
    #- test1.settings:
    #    ROOT_URLCONF = 'test1.urls'
    #- test1.urls:
    from django.contrib import admin
    from django.urls import path,include
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('',include('booktest.urls')),
    ]
    #- booktest.urls
    from django.contrib import admin
    from django.urls import path
    from . import views
    urlpatterns = [
        path('index/', views.index,name="index"),
    ]
    

    django templates

    • 创建目录:project_name/templates/app_name1/
    • 模板文件:test1/templates/booktest/index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{{ title }}</title>
    </head>
    <body>
        <h1>hello world!</h1>
        <hr>
        {% for i in list %}
            <h3>{{i}}</h3>
        {% endfor %}
    </body>
    </html>
    
    • 编写返回页面视图:views.py
    from django.shortcuts import render
    # from django.http import HttpResponse
    # Create your views here.
    ## HTTPRequest
    def index(request):
        context={'title':'django首页','list':range(10)}     ## 多个字段需要传入html时,可以考虑字典
        # return HttpResponse("hello world")
        return render(request,'booktest/index.html',context)	## context为传入HTML的参数
    
    • 设置模板路径:settings.py
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'templates')], ## templates模板路径拼接
            ...
    }
    
    • django 支持的模板语言
    <title>{{ title }}</title>  ## 变量
    {% for i in list %}		## 循环
       <h3>{{i}}</h3>
    {% endfor %}
    

    django models + views + templates

    • views.py
    #coding=utf-8
    from django.shortcuts import render
    from .models import *
    # from django.http import HttpResponse
    
    # Create your views here.
    
    ## HTTPRequest
    def index(request):
        #context={'title':'django首页','list':range(10)}     ## 多个字段需要传入html时,可以考虑字典
        # return HttpResponse("hello world")
        list = BookInfo.objects.all()
        context = {'booklist':list}
        return render(request,'booktest/index2.html',context)
    
    def detail(request,id):                 ##  id 用来接收url.py中匹配到的数字
        print(id)
        list = BookInfo.objects.get(id=id).HeroInfo_set()    ## 使用网页传过来的值,找到BookInfo中对应的一本书
        ## 反向获取引用bookInfo的所有HeroInfo信息
        ## HeroInfo中的book字段设置为外键,是BookInfo中title
        context = {'herolist':list}
        return render(request,'booktest/detail.html',context)
    
    • index2.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=, initial-scale=1.0">
        <title>图书列表</title>
    </head>
    <body>
        <ul>
        {% for book in booklist %}
            <li><a href="/{{ book.id }}">{{ book.title }}</a></li>
        {% endfor %}
        </ul>
    </body>
    </html>
    
    • detail.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>英雄信息</title>
    </head>
    <body>
        <a href="/">首页</a>
        <hr>
        <ul>
        {% for hero in herolist %}
            <li>{{hero.name}}</li>
        {%endfor%}
    </ul>
    </body>
    </html>
    
    • urls.py
    from django.contrib import admin
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('index/', views.index),
        ## 网页访问:http://127.0.0.1:8000/1,http://127.0.0.1:8000/2 ..
        path('(d+)',views.detail),   ## ()提取数字:d+   从url页面获取的数字,在views中使用变量如id接收
    ]
    
  • 相关阅读:
    数据库中的LEFT JOIN 个人理解
    C++ 类的继承方式
    KMP字符串匹配算法
    C++ 运算符重载_加号
    Pin API INS
    Python 爬虫爬取多页数据
    Pin
    NO.12 13 章 字符串&扩展(哈希、KMP、分块、BIT)
    NO.11章 DP(递归递推、最大连续子序列和、LIS、LCS、最长回文子串、DAG、背包)
    NO.10章 图(遍历、最短路、生成树、拓扑、关键路径)
  • 原文地址:https://www.cnblogs.com/moox/p/13290222.html
Copyright © 2011-2022 走看看