Django
1.结构分析
Django框架
- settings 配置文件
- manage 实用的命令行工具,可以让你以各种方式与该Django项目进行交互
python3 manage.py runserver
- admin 创建项目,为我们提供后台管理。
# admin
from django.contrib import admin
from .models import People
from .models import Phone
from .models import Address
admin.site.register(People)
admin.site.register(Phone)
admin.site.register(Address)
views 视图配置 是一个请求处理函数 接收HTTP请求并返回HTTP响应。视图通过模型访问满足请求所需的数据,并将响应的格式委托给模板
urls url对应关系 对应逻辑函数为每个逻辑函数分配相应视图(网站url到views的映射,匹配出现在URL中的字符或数字的特定模式,并将其作为数据传递给视图views 类似目录)
# views
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world ! ")
# urls
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.hello),
]
path()函数
path(route,view,kwargs=None,name=None)
- route 字符串,表示URL规则,与之匹配的 URL 会执行对应的第二个参数 view
- view 用于执行与正则表达式匹配的URL请求
- kwargs 视图使用的字典类型的参数
- name 用来反向获取URL
# 通讯录——urls
from django.urls import path
from . import views
urlpatterns=[
path('', views.index, name='index'),
path('<int:people_id>/', views.detail, name='detail'),
path('search', views.search, name='search'),
]
# 通讯录——views
from django.http import HttpResponse
from django.template import loader
from django.shortcuts import render
from django.http import Http404
from .models import People
def index(request):
people_list = People.objects.order_by('-add_date')[:5]
template = loader.get_template('phone/index.html')
context= {
'people_list': people_list,
}
return HttpResponse(template.render(context, request))
def detail(request, people_id):
try:
people = People.objects.get(pk=people_id)
except People.DoesNotExist:
raise Http404("此人不在通讯录内")
return render(request,'phone/detail.html',{'people':people})
def search(request):
ctx={}
if request.POST:
ctx['rlt'] = request.POST['q']
name = request.POST['q']
print(request.POST['q'])
try:
people = People.objects.get(people_text=name)
except:
raise Http404("此人不在通讯录内")
return render(request,'phone/detail.html',{'people':people})
render()函数
载入模板,填充上下文,再返回由它生成的HttpResonse对象
- templates 模板 编辑更多视图 添加html文件
# 通讯录——index.html
<h1>通讯录</h1>
<form action="/phone/search" method="post">
{% csrf_token %} {% csrf_token %}
<input type="text" name="q">
<input type="submit" value="查询">
</form>
{% if people_list %}
<ul>
{% for people in people_list %}
<p>姓名</p><li><a href="/phone/{{ people.id }}/">{{people.name_text}}</a></li>
{% endfor %}
</ul>
{% else %}
<p>NO people are available.</p>
{% endif %}
# 通讯录——detail.html
<h1>{{ people.name_text }}</h1>
<ul>
<h2>地址</h2>
{% for address in people.address_set.all %}
<li>{{ address.address }}</li>
{% endfor %}
<h2>手机号</h2>
{%for phone in people.phone_set.all%}
<li>{{ phone.number }}</li>
{% endfor %}
</ul>
- apps 配置当前APP
from django.apps import AppConfig
class PollConfig(AppConfig):
name = 'poll'
- models 写指定的类通过命令可以创建数据库结构
# models
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
以上的类名代表数据库表名,且继承了models.Model。每个模型都有许多的变量,都表示模型里的一个数据库字段。
- CharField 字符字段
- DateTimeField 日期时间字段
每个Field类实例变量的名字也是字段名。
# 通讯录——models
from django.db import models
class People(models.Model):
name_text = models.CharField(max_length = 200)
add_date = models.DateTimeField('data added')
def __str__(self):
return self.name_text
class Phone(models.Model):
people = models.ForeignKey(People,on_delete=models.CASCADE)
number = models.CharField(max_length = 200)
def __str__(self):
return self.number
class Address(models.Model):
people = models.ForeignKey(People,on_delete=models.CASCADE)
address = models.CharField(max_length = 200)
def __str__(self):
return self.address
中间还有一些在命令行上创建、激活的步骤 时间有限 仅为考试复习做准备。
11.11python考试 希望能考出一个不错的分数!!!!
Python复习系列结束了,下一次写博客应该会是寒假的时候了吧,希望寒假能够把python深入学习一下数据处理和分析;还有matlab和一些通信理论方面的学习。这学期要开始考试了,加油哇!!!!