一、产品需求
1、管理员能够发布职位
2、匿名用户(候选人)能够浏览职位
3、匿名用户能够投递职位
创建一个应用:
python manage.py startapp 应用名
每次创建一个应用要记得在INSTALLED_APPS在添加应用名
二、编写Model
继承models.Model,编写了model之后,将编写的model注册到admin里面。数据的同步也是使用makemigrations和migrate去同步数据。
三、admin注册
Job是创建的model
JobAdmin是模型的管理类,是对model在admin管理后台上自定义的一些属性。继承的是admin.ModelAdmin
admin.site.register(Job,JobAdmin)
模型管理类用到的属性和方法
- list_display:列表页展示的字段
- exclude:修改增加页隐藏的字段
- def save_model:ModelAdmin这个父类定义的方法,可以在模型保存前做一些操作
四、模板
使用block指令定义了页面内容块,块的名称为content
{% block content %}
{% endblock %}
继承用:
{% extends 'base HTML名称' %}
五、view视图层
可以用函数定义,也可以用视图的类去定义,匿名用户查看职位列表:
def jobList(request):
job_list = Job.objects.order_by('job_type') #取列表页,按职位列表排序
template = loader.get_template('joblist.html')#加载模板,用模板的加载器来加载
context = {'job_lixt':job_list} #定义一个上下文,上下文用map定义
for job in job_list: #遍历这个职位列表
job.city_name = Cities[job.job_city] #把城市和职位类型转换成一个字符串
job.job_type = JobTypes[job.job_type]
return HttpResponse(template.render(context)) #用模板render方法把模板上下文展现给用户
把定义的view里面定义的jobList视图添加到URL路径中。
from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from jobs import views
urlpatterns = [
url(r"^jobList/",views.jobList, name='jobList')
]
匿名用户浏览职位详情
显示详情页的函数:
def detail(request, job_id):
try:
job = Job.objects.get(pk=job_id)
job.city_name = Cities[job.job_city][1]
except Job.DoesNotExist:
raise Http404("Job does not exist")
return render(request, 'job.html', {'job':job})
urls.py
url(r"^job/(?P<job_id>\d+)/$", views.detail, name='detail')