﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
16174	Class based view update for FormPreview	Ryan Kaskel	Ryan Kaskel	"I used the `FormPreview` class in `django.contrib.formtools.preview` for the first time this week. After working with class based views for a while, I really missed methods like `get_form` for custom form instantiation. Recently, the form wizard machinery (which is much more complex) got a class-based views update (#9200) so I decided to update the FormPreview class as well. It uses `django.views.generic.FormView` and it's on a Django branch on my Github account. ([https://github.com/ryankask/django/blob/cbv-formpreview/django/contrib/formtools/preview.py] -- I've also attached a diff based on the Django Github mirror which I am pretty sure is acceptable.

In order to maintain 100% compatibility, there are some issues to note:

* The original class used `get_context` whereas the class based views use `get_context_data`. I've made it so both can be used but if backwards compatibility can be broken, it would be better to only use `get_context_data`.
* The original class used `__call__` so it could be easily instantiated with a form in a urlconf. I moved the important code to `dispatch` and `__call__` just returns a call to `dispatch`.
* The `failed_hash` method, which isn't documented, falls under a section in the code which says ""METHODS SUBCLASSES MIGHT OVERRIDE IF APPROPRIATE."" I left the ability to call that method and it just wraps `post` and sets the current stage to `preview`.
* `get_initial`, `process_preview`, and `security_hash`, which all fall under the ""override if you need to"" section only documented in the code, used to take a request as an argument. They all still do. The methods that were marked ""don't touch"" now use the instance's `request`.

If backwards compatibility doesn't need to be maintained, the code can be cleaned up a little more.

Anyway, any comments on the patch would be much appreciated and I'd update the docs if devs think it's okay.

By the way, if none of this is acceptable, the test `formtools.PreviewTests.test_form_submit_bad_hash` needs to be fixed (it is in my patch). `self.client.post('/previewpreview/', self.test_data)` results in a 404 so the next assertion that some text isn't in the template passes when it shouldn't."	Cleanup/optimization	closed	contrib.formtools	1.3	Normal	fixed	formpreview, preview		Accepted	1	1	0	1	0	0
