Ⅰ 如何用Django实现收藏功能
1. Django Forms的强大之处
有些django项目并不直接呈现HTML, 二是以API框架的形式存在, 但你可能没有想到, 在这些API形式的django项目中也用到了django forms. django forms不仅仅是用来呈现HTML的, 他们最强的地方应该是他们的验证能力. 下面我们就介绍几种和Django forms结合使用的模式:
2. 模式一: ModelForm和默认验证
最简单的使用模式便是ModelForm和model中定义的默认验证方式的组合:
myapp/views.py
from django.views.generic import CreateView, UpdateView
from braces.views import LoginRequiredMixin
from .models import Article
class ArticleCreateView(LoginRequiredMixin, CreateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
class ArticleUpdateView(LoginRequiredMixin, UpdateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
正如以上代码中看到的一样:
ArticleCreateView和ArticleUpdateView中设置model为Article
两个view都基于Article model自动生成了ModelForm
这些ModelForm的验证, 是基于Article model中定义的field转换而来的
3. 模式二, 在ModelForm中修改验证
在上面的例子中, 如果我们希望每篇article title的开头都是new, 那么应该怎么做呢? 首先我们需要建立自定义的验证(validator):
utils/validator.py
from django.core.exceptions import ValidationError
def validate_begins(value):
if not value.startswith(u;new;):
raise ValidationError(u;Must start with new;)
可见, 在django中的验证程序就是不符合条件便抛出ValidationError的function, 为了方便重复使用, 我们将它们放在django app utils的validators.py中.
接下来, 我们可以在model中加入这些validator, 但为了今后的方便修改和维护, 我们更倾向于加入到ModelForm中:
myapp/forms.py
from django import forms
from utils.validators import validate_begin
from .models import Article
class ArticleForm(forms.ModelForm):
dev __init__(self, *args, **kwargs):
super(ArticleForm, self).__init__(8args, **kwargs)
self.fields[title].validators.append(validate_begin)
class Meta:
model = Article
Django的edit views(UpdateView和CreateView等)的默认行为是根据view中model属性, 自动创建ModelForm. 因此, 我们需要调用我们自己的Modelform来覆盖自动创建的:
myapp/views.py
from django.views.generic import CreateView, UpdateView
from braces.views import LoginRequiredMixin
from .models import Article
from .forms import ArticleForm
class ArticleCreateView(LoginRequiredMixin, CreateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
form_class = ArticleForm
class ArticleUpdateView(LoginRequiredMixin, UpdateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
form_class = ArticleForm
4. 模式三, 使用form的clean()和clean_lt;field;()方法
如果我们希望验证form中的多个field, 或者验证涉及到已经存在之后的数据, 那么我们就需要用到form的clean()和clean_lt;field;()方法了. 以下代码检查密码长度是否大于7位, 并且password是否和password2相同:
myapp/forms.py
from django import forms
class MyUserForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
password2 = forms.CharField()
def clean_password(self):
password = self.cleaned_data[;password;]
if len(password) lt;= 7:
raise forms.ValidationError(password insecure)
return password
def clean():
cleaned_data = super(MyUserForm, self).clean()
password = cleaned_data.get(;password;, ;;)
password2 = cleaned_data.get(;password2;, ;;)
if password != password2:
raise forms.ValidationError(passwords not match)
return cleaned_data
其中需要注意的是, clean()和clean_lt;field;()的最后必须返回验证完毕或修改后的值.
5. 模式四, 自定义ModelForm中的field
我们会经常遇到在form中需要修改默认的验证, 比如一个model中有许多非必填项, 但为了信息完整, 你希望这些field在填写时是必填的:
myapp/models.py
from django.db import models
class MyUser(models.Model):
username = models.CharField(max_lenh=100)
password = models.CharField(max_lenh=100)
address = models.TextField(blank=True)
phone = models.CharField(max_lenh=100, blank=True)
为了达到以上要求, 你可能会通过直接增加field改写ModelForm:
请不要这么做
myapp/forms.py
from django import forms
from .models import MyUser
class MyUserForm(forms.ModelForm):
请不要这么做
address = forms.CharField(required=True)
请不要这么做
phone = forms.CharField(required=True)
class Meta:
model = MyUser
请不要这么做, 因为这违反不重复的原则, 而且经过多次的拷贝粘贴, 代码会变得复杂难维护. 正确的方式应当是利用__init__():
myapp/forms.py
from django import forms
from .models import MyUser
class MyUserForm(forms.ModelForm):
def __init__(self, *args, **kwarg):
super(MyUserForm, self).__init__(*args, **kwargs)
self.fields[;address;].required = True
self.fields[;phone;].required = True
class Meta:
model = MyUser
值得注意的是, Django forms也是Python类, 类可以继承和被继承, 也可以动态修改.
Ⅱ django怎么实现button按钮与form表单关联
确实。
如下的表单内容:
<form action="/save" method="post">
<input type="hidden" name="file_name" value={{file_name}}>
<input name="submit" type="submit" value="save" size="" />
<input name="submit" type="submit" value="cancel" size="" />
</form>
我在服务器端可以通过request.post.get('submit') 为save 或者 cancel来判断用户点击了哪个变量,这样就方便多了,不需要用javascript了
Ⅲ django写商业网站的时候用户系统是自己重写还是用自带的
最好是是自带的,因为基本够用了,如果不够用,User model有个get_profile函数,可以得到和User对象关联的Profile对象,这个Profile可以有其他个人信息,而且大多数第三方django app都是依赖自带User。
另外django1.5现在也支持自定义 User class,你可以看下。
Ⅳ django的架构设计
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 模板(Template),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 视图(View),即业务逻辑层 存取模型及调取恰当模板的相关逻辑。模型与模板之间的桥梁。 从以上表述可以看出Django 视图不处理用户输入,而仅仅决定要展现哪些数据给用户,而Django 模板 仅仅决定如何展现Django视图指定的数据。或者说, Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。
至于MVC控制器部分,由Django框架的URLconf来实现。URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。URLconf对于URL的规则没有任何限制,你完全可以设计成任意的URL风格,不管是传统的,RESTful的,或者是另类的。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作.在写程序的时候,只要调用相应的方法就行了,感觉很方便。程序员把控制层东西交给Django自动完成了。 只需要编写非常少的代码完成很多的事情。所以,它比MVC框架考虑的问题要深一步,因为我们程序员大都在写控制层的程序。现在这个工作交给了框架,仅需写很少的调用代码,大大提高了工作效率。
Ⅳ 用python3+django怎么实现淘宝联系卖家
淘宝联系卖家其实是个独立的功能,不是完全融合在html,简单的实现还可以用tcp连接,一边做服务端,一边做客户端,然后将数据写进html
Ⅵ django 怎么实现websocket
推荐使用Django channels,这东西有websocket功能
Ⅶ Django里面怎么实现数据库视图啊 就是虚拟表
正经回答:先在数据库中建立好视图,然后django中建立对应的model。表所对应的类下面再建立一个Meta类,大致如下
classViewModel(models.Model):
"""这个model类对应你所建立好的视图"""
classMeta(object):
"""同理,该方法可用于使用mysql中任何已有的表,不仅是视图"""
db_table='your_view'#显式指定表名,也就是你建立的视图的名字
managed=false#默认是ture,设成falsedjango将不会执行建表和删表操作
#建立字段间的映射
#需要注意的是,必须设一个字段为主键
#不然django会自动创建一个id字段为主键,引发错误
网络知道越来越辣鸡了,全是答非所问的。
Ⅷ 已知博客源代码,怎么用Python实现框架是Django
Django框架相对比较大,Python的版本、django的版本操作也略有不同,所以这个不是一个回答能解决你的问题。
你首先要去学习django框架
Ⅸ 基于Django的实验室任务管理系统的设计与实现,满意追加100分,急啊!!
选题有些偏,没有国内外研究动态。一个小项目,算不上研究。
如果一定要写,可以落在任务管理系统本身上。 结合实验室,应该是属于OA的一个子类。OA系统中的一个任务管理系统。至于你为什么用django,其实也与任务管理无关。django只是实现的一个手段。
研究动态可以从OA,教学任务管理等几个方向查资料。你会发现很多“研究动态“,然后好好想一想你这个选题的意义是什么。最后答辩时如何去向老师表明你的逻辑。
老实说我本人根本不看好这个题目,有些儿戏,可能1天就干完的事情。 如果这个是你的毕业设计的话,对你”找工作“,也没有价值。
Ⅹ django实现实时消息推送有什么好的方案
貌似跟Django没关系。
ajax轮询。WebSocket 推荐